import xmlbuilder from "xmlbuilder";
import {randomUUID} from "node:crypto";
import dayjs from "dayjs";
import { and, eq, inArray } from "drizzle-orm";
import { createddocuments, tenants } from "../../../db/schema";

export const createSEPAExport = async (server,idsToExport, tenant_id) => {
    const data = await server.db
        .select()
        .from(createddocuments)
        .where(and(
            eq(createddocuments.tenant, tenant_id),
            inArray(createddocuments.id, idsToExport)
        ))

    const tenantRows = await server.db
        .select()
        .from(tenants)
        .where(eq(tenants.id, tenant_id))
        .limit(1)
    const tenantData = tenantRows[0]
    console.log(tenantData)

    console.log(data)

    let transactions = []

    let obj = {
        Document: {
            '@xmlns':"urn:iso:std:iso:20022:tech:xsd:pain.008.001.02",
            'CstmrDrctDbtInitn': {
                'GrpHdr': {
                    'MsgId': randomUUID(),
                    'CredDtTm': dayjs().format("YYYY-MM-DDTHH:mm:ss"),
                    'NbOfTxs': transactions.length,
                    'CtrlSum': 0, // TODO: Total Sum
                    'InitgPty': {
                        'Nm': tenantData.name
                    }
                },
                'PmtInf': {
                    'PmtInfId': "", // TODO: Mandatsreferenz,
                    'PmtMtd': "DD",
                    'BtchBookg': "true", // TODO: BatchBooking,
                    'NbOfTxs': transactions.length,
                    'CtrlSum': 0, //TODO: Total Sum
                    'PmtTpInf': {
                        'SvcLvl': {
                            'Cd': "SEPA"
                        },
                        'LclInstrm': {
                            'Cd': "CORE" // Core für BASIS / B2B für Firmen
                        },
                        'SeqTp': "RCUR" // TODO: Unterscheidung Einmalig / Wiederkehrend
                    },
                    'ReqdColltnDt': dayjs().add(3, "days").format("YYYY-MM-DDTHH:mm:ss"),
                    'Cdtr': {
                        'Nm': tenantData.name
                    },
                    'CdtrAcct': {
                        'Id': {
                            'IBAN': "DE" // TODO: IBAN Gläubiger EINSETZEN
                        }
                    },
                    'CdtrAgt': {
                        'FinInstnId': {
                            'BIC': "BIC" // TODO: BIC des Gläubigers einsetzen
                        }
                    },
                    'ChrgBr': "SLEV",
                    'CdtrSchmeId': {
                        'Id': {
                            'PrvtId': {
                                'Othr': {
                                    'Id': tenantData.creditorId,
                                    'SchmeNm': {
                                        'Prty': "SEPA"
                                    }
                                }
                            }
                        }
                    },
                    //TODO ITERATE ALL INVOICES HERE
                    'DrctDbtTxInf': {
                        'PmtId': {
                            'EndToEndId': "" // TODO: EINDEUTIGE ReFERENZ wahrscheinlich RE Nummer
                        },
                        'InstdAmt': {
                            '@Ccy':"EUR",
                            '#text':100 //TODO: Rechnungssumme zwei NK mit Punkt
                        },
                        'DrctDbtTx': {
                            'MndtRltdInf': {
                                'MndtId': "", // TODO: Mandatsref,
                                'DtOfSgntr': "", //TODO: Unterschrieben am,
                                'AmdmntInd': "" //TODO: Mandat geändert
                            }
                        },
                        'DbtrAgt': {
                            'FinInstnId': {
                                'BIC': "", //TODO: BIC Debtor
                            }
                        },
                        'Dbtr': {
                            'Nm': "" // TODO NAME Debtor
                        },
                        'DbtrAcct': {
                            'Id': {
                                'IBAN': "DE" // TODO IBAN Debtor
                            }
                        },
                        'RmtInf': {
                            'Ustrd': "" //TODO Verwendungszweck Rechnungsnummer
                        }
                    }
                }
            }

        }
    }


    let doc = xmlbuilder.create(obj, {encoding: 'UTF-8', standalone: true})

    console.log(doc.end({pretty:true}))

}
