import { XMLDocument } from 'libxmljs';
import { Buffer } from 'node:buffer';
import { CrossIndustryInvoiceType, AccountingAccountTypeCodeType, AdvancePaymentType, AllowanceChargeReasonCodeType, AmountType, BinaryObjectType, CodeType, ContactTypeCodeType, CountryIDType, CreditorFinancialAccountType, CreditorFinancialInstitutionType, CurrencyCodeType, DateTimeType, DateType, DebtorFinancialAccountType, DeliveryTermsCodeType, DocumentCodeType, DocumentContextParameterType, DocumentLineDocumentType, ExchangedDocumentContextType, ExchangedDocumentType, FormattedDateTimeType, HeaderTradeAgreementType, HeaderTradeDeliveryType, HeaderTradeSettlementType, IDType, IndicatorType, LegalOrganizationType, LineStatusCodeType, LineTradeAgreementType, LineTradeDeliveryType, LineTradeSettlementType, LogisticsServiceChargeType, LogisticsTransportMovementType, MeasureType, NoteType, NumericType, PartyRoleCodeType, PaymentMeansCodeType, PercentType, ProcuringProjectType, ProductCharacteristicType, ProductClassificationType, QuantityType, RateType, ReferenceCodeType, ReferencedDocumentType, ReferencedProductType, SpecifiedPeriodType, SupplyChainConsignmentType, SupplyChainEventType, SupplyChainTradeLineItemType, SupplyChainTradeTransactionType, TaxCategoryCodeType, TaxRegistrationType, TaxTypeCodeType, TextType, TimeReferenceCodeType, TradeAccountingAccountType, TradeAddressType, TradeAllowanceChargeType, TradeContactType, TradeCountryType, TradeCurrencyExchangeType, TradeDeliveryTermsType, TradePartyType, TradePaymentDiscountTermsType, TradePaymentPenaltyTermsType, TradePaymentTermsType, TradePriceType, TradeProductInstanceType, TradeProductType, TradeSettlementFinancialCardType, TradeSettlementHeaderMonetarySummationType, TradeSettlementLineMonetarySummationType, TradeSettlementPaymentMeansType, TradeTaxType, TransportModeCodeType, UniversalCommunicationType } from './models.mjs';
import { PDFDocument } from 'pdf-lib';

declare function check(options: {
    xml: string | Buffer | XMLDocument;
    flavor?: string;
    level?: string;
}): Promise<{
    valid: boolean;
    errors: any[];
    flavor: string;
    level: string;
}>;

/**
 * Converter for FacturX CrossIndustryInvoice model to XML
 */
declare function invoiceToXml(invoice: CrossIndustryInvoiceType): Promise<XMLDocument>;

interface ExtractResult {
    filename: string;
    xml: string;
    flavor?: string;
    level?: string;
}
declare function extract(options: {
    pdf: string | Buffer | PDFDocument;
    check?: boolean;
    level?: string;
    flavor?: string;
}): Promise<ExtractResult>;

interface PdfMetadata {
    author: string;
    title: string;
    subject: string;
    keywords: string[];
    date: Date;
}

declare function generate(options: {
    pdf: string | Buffer | PDFDocument;
    xml: string | Buffer | XMLDocument;
    check?: boolean;
    flavor?: string;
    level?: string;
    language?: string;
    meta?: PdfMetadata;
}): Promise<Uint8Array>;

/**
 * Factur-X model index file
 */

declare const index_AccountingAccountTypeCodeType: typeof AccountingAccountTypeCodeType;
declare const index_AdvancePaymentType: typeof AdvancePaymentType;
declare const index_AllowanceChargeReasonCodeType: typeof AllowanceChargeReasonCodeType;
declare const index_AmountType: typeof AmountType;
declare const index_BinaryObjectType: typeof BinaryObjectType;
declare const index_CodeType: typeof CodeType;
declare const index_ContactTypeCodeType: typeof ContactTypeCodeType;
declare const index_CountryIDType: typeof CountryIDType;
declare const index_CreditorFinancialAccountType: typeof CreditorFinancialAccountType;
declare const index_CreditorFinancialInstitutionType: typeof CreditorFinancialInstitutionType;
declare const index_CrossIndustryInvoiceType: typeof CrossIndustryInvoiceType;
declare const index_CurrencyCodeType: typeof CurrencyCodeType;
declare const index_DateTimeType: typeof DateTimeType;
declare const index_DateType: typeof DateType;
declare const index_DebtorFinancialAccountType: typeof DebtorFinancialAccountType;
declare const index_DeliveryTermsCodeType: typeof DeliveryTermsCodeType;
declare const index_DocumentCodeType: typeof DocumentCodeType;
declare const index_DocumentContextParameterType: typeof DocumentContextParameterType;
declare const index_DocumentLineDocumentType: typeof DocumentLineDocumentType;
declare const index_ExchangedDocumentContextType: typeof ExchangedDocumentContextType;
declare const index_ExchangedDocumentType: typeof ExchangedDocumentType;
declare const index_FormattedDateTimeType: typeof FormattedDateTimeType;
declare const index_HeaderTradeAgreementType: typeof HeaderTradeAgreementType;
declare const index_HeaderTradeDeliveryType: typeof HeaderTradeDeliveryType;
declare const index_HeaderTradeSettlementType: typeof HeaderTradeSettlementType;
declare const index_IDType: typeof IDType;
declare const index_IndicatorType: typeof IndicatorType;
declare const index_LegalOrganizationType: typeof LegalOrganizationType;
declare const index_LineStatusCodeType: typeof LineStatusCodeType;
declare const index_LineTradeAgreementType: typeof LineTradeAgreementType;
declare const index_LineTradeDeliveryType: typeof LineTradeDeliveryType;
declare const index_LineTradeSettlementType: typeof LineTradeSettlementType;
declare const index_LogisticsServiceChargeType: typeof LogisticsServiceChargeType;
declare const index_LogisticsTransportMovementType: typeof LogisticsTransportMovementType;
declare const index_MeasureType: typeof MeasureType;
declare const index_NoteType: typeof NoteType;
declare const index_NumericType: typeof NumericType;
declare const index_PartyRoleCodeType: typeof PartyRoleCodeType;
declare const index_PaymentMeansCodeType: typeof PaymentMeansCodeType;
declare const index_PercentType: typeof PercentType;
declare const index_ProcuringProjectType: typeof ProcuringProjectType;
declare const index_ProductCharacteristicType: typeof ProductCharacteristicType;
declare const index_ProductClassificationType: typeof ProductClassificationType;
declare const index_QuantityType: typeof QuantityType;
declare const index_RateType: typeof RateType;
declare const index_ReferenceCodeType: typeof ReferenceCodeType;
declare const index_ReferencedDocumentType: typeof ReferencedDocumentType;
declare const index_ReferencedProductType: typeof ReferencedProductType;
declare const index_SpecifiedPeriodType: typeof SpecifiedPeriodType;
declare const index_SupplyChainConsignmentType: typeof SupplyChainConsignmentType;
declare const index_SupplyChainEventType: typeof SupplyChainEventType;
declare const index_SupplyChainTradeLineItemType: typeof SupplyChainTradeLineItemType;
declare const index_SupplyChainTradeTransactionType: typeof SupplyChainTradeTransactionType;
declare const index_TaxCategoryCodeType: typeof TaxCategoryCodeType;
declare const index_TaxRegistrationType: typeof TaxRegistrationType;
declare const index_TaxTypeCodeType: typeof TaxTypeCodeType;
declare const index_TextType: typeof TextType;
declare const index_TimeReferenceCodeType: typeof TimeReferenceCodeType;
declare const index_TradeAccountingAccountType: typeof TradeAccountingAccountType;
declare const index_TradeAddressType: typeof TradeAddressType;
declare const index_TradeAllowanceChargeType: typeof TradeAllowanceChargeType;
declare const index_TradeContactType: typeof TradeContactType;
declare const index_TradeCountryType: typeof TradeCountryType;
declare const index_TradeCurrencyExchangeType: typeof TradeCurrencyExchangeType;
declare const index_TradeDeliveryTermsType: typeof TradeDeliveryTermsType;
declare const index_TradePartyType: typeof TradePartyType;
declare const index_TradePaymentDiscountTermsType: typeof TradePaymentDiscountTermsType;
declare const index_TradePaymentPenaltyTermsType: typeof TradePaymentPenaltyTermsType;
declare const index_TradePaymentTermsType: typeof TradePaymentTermsType;
declare const index_TradePriceType: typeof TradePriceType;
declare const index_TradeProductInstanceType: typeof TradeProductInstanceType;
declare const index_TradeProductType: typeof TradeProductType;
declare const index_TradeSettlementFinancialCardType: typeof TradeSettlementFinancialCardType;
declare const index_TradeSettlementHeaderMonetarySummationType: typeof TradeSettlementHeaderMonetarySummationType;
declare const index_TradeSettlementLineMonetarySummationType: typeof TradeSettlementLineMonetarySummationType;
declare const index_TradeSettlementPaymentMeansType: typeof TradeSettlementPaymentMeansType;
declare const index_TradeTaxType: typeof TradeTaxType;
declare const index_TransportModeCodeType: typeof TransportModeCodeType;
declare const index_UniversalCommunicationType: typeof UniversalCommunicationType;
declare namespace index {
  export {
    index_AccountingAccountTypeCodeType as AccountingAccountTypeCodeType,
    index_AdvancePaymentType as AdvancePaymentType,
    index_AllowanceChargeReasonCodeType as AllowanceChargeReasonCodeType,
    index_AmountType as AmountType,
    index_BinaryObjectType as BinaryObjectType,
    index_CodeType as CodeType,
    index_ContactTypeCodeType as ContactTypeCodeType,
    index_CountryIDType as CountryIDType,
    index_CreditorFinancialAccountType as CreditorFinancialAccountType,
    index_CreditorFinancialInstitutionType as CreditorFinancialInstitutionType,
    index_CrossIndustryInvoiceType as CrossIndustryInvoiceType,
    index_CurrencyCodeType as CurrencyCodeType,
    index_DateTimeType as DateTimeType,
    index_DateType as DateType,
    index_DebtorFinancialAccountType as DebtorFinancialAccountType,
    index_DeliveryTermsCodeType as DeliveryTermsCodeType,
    index_DocumentCodeType as DocumentCodeType,
    index_DocumentContextParameterType as DocumentContextParameterType,
    index_DocumentLineDocumentType as DocumentLineDocumentType,
    index_ExchangedDocumentContextType as ExchangedDocumentContextType,
    index_ExchangedDocumentType as ExchangedDocumentType,
    index_FormattedDateTimeType as FormattedDateTimeType,
    index_HeaderTradeAgreementType as HeaderTradeAgreementType,
    index_HeaderTradeDeliveryType as HeaderTradeDeliveryType,
    index_HeaderTradeSettlementType as HeaderTradeSettlementType,
    index_IDType as IDType,
    index_IndicatorType as IndicatorType,
    index_LegalOrganizationType as LegalOrganizationType,
    index_LineStatusCodeType as LineStatusCodeType,
    index_LineTradeAgreementType as LineTradeAgreementType,
    index_LineTradeDeliveryType as LineTradeDeliveryType,
    index_LineTradeSettlementType as LineTradeSettlementType,
    index_LogisticsServiceChargeType as LogisticsServiceChargeType,
    index_LogisticsTransportMovementType as LogisticsTransportMovementType,
    index_MeasureType as MeasureType,
    index_NoteType as NoteType,
    index_NumericType as NumericType,
    index_PartyRoleCodeType as PartyRoleCodeType,
    index_PaymentMeansCodeType as PaymentMeansCodeType,
    index_PercentType as PercentType,
    index_ProcuringProjectType as ProcuringProjectType,
    index_ProductCharacteristicType as ProductCharacteristicType,
    index_ProductClassificationType as ProductClassificationType,
    index_QuantityType as QuantityType,
    index_RateType as RateType,
    index_ReferenceCodeType as ReferenceCodeType,
    index_ReferencedDocumentType as ReferencedDocumentType,
    index_ReferencedProductType as ReferencedProductType,
    index_SpecifiedPeriodType as SpecifiedPeriodType,
    index_SupplyChainConsignmentType as SupplyChainConsignmentType,
    index_SupplyChainEventType as SupplyChainEventType,
    index_SupplyChainTradeLineItemType as SupplyChainTradeLineItemType,
    index_SupplyChainTradeTransactionType as SupplyChainTradeTransactionType,
    index_TaxCategoryCodeType as TaxCategoryCodeType,
    index_TaxRegistrationType as TaxRegistrationType,
    index_TaxTypeCodeType as TaxTypeCodeType,
    index_TextType as TextType,
    index_TimeReferenceCodeType as TimeReferenceCodeType,
    index_TradeAccountingAccountType as TradeAccountingAccountType,
    index_TradeAddressType as TradeAddressType,
    index_TradeAllowanceChargeType as TradeAllowanceChargeType,
    index_TradeContactType as TradeContactType,
    index_TradeCountryType as TradeCountryType,
    index_TradeCurrencyExchangeType as TradeCurrencyExchangeType,
    index_TradeDeliveryTermsType as TradeDeliveryTermsType,
    index_TradePartyType as TradePartyType,
    index_TradePaymentDiscountTermsType as TradePaymentDiscountTermsType,
    index_TradePaymentPenaltyTermsType as TradePaymentPenaltyTermsType,
    index_TradePaymentTermsType as TradePaymentTermsType,
    index_TradePriceType as TradePriceType,
    index_TradeProductInstanceType as TradeProductInstanceType,
    index_TradeProductType as TradeProductType,
    index_TradeSettlementFinancialCardType as TradeSettlementFinancialCardType,
    index_TradeSettlementHeaderMonetarySummationType as TradeSettlementHeaderMonetarySummationType,
    index_TradeSettlementLineMonetarySummationType as TradeSettlementLineMonetarySummationType,
    index_TradeSettlementPaymentMeansType as TradeSettlementPaymentMeansType,
    index_TradeTaxType as TradeTaxType,
    index_TransportModeCodeType as TransportModeCodeType,
    index_UniversalCommunicationType as UniversalCommunicationType,
  };
}

/**
 * Parse a Factur-X XML string into a CrossIndustryInvoiceType object
 */
declare function xmlToInvoice(xml: string | Buffer): Promise<CrossIndustryInvoiceType>;

export { index as Models, check, extract, generate, invoiceToXml, xmlToInvoice };
