"""Cheqi SDK models."""

from cheqi.models.base import CheqiBaseModel, CheqiDecimal
from cheqi.models.company import (
    Company,
    CompanyAddress,
    CreateStoreRequest,
    ProvisionCompanyRequest,
    ProvisionCompanyResponse,
    Store,
)
from cheqi.models.credit_note import (
    CheqiCreditNote,
    CreditNoteCreatedResponse,
    CreditNoteEnvelope,
    CreditNoteInitiationRequest,
    CreditNoteResult,
    CreditNoteTemplateGenerationRequest,
    CreditNoteTemplateRequest,
    CreditNoteTemplateResponse,
    EncryptedCreditNote,
    EncryptedCreditNoteInitiationRequest,
    EncryptedCreditNotesRequest,
    RefundBankAccount,
    ReturnLineItem,
)
from cheqi.models.encryption import (
    EncryptedReceipt,
    EncryptedReceiptRequestDto,
    EncryptedReceiptsRequest,
)
from cheqi.models.enums import (
    AccountIdentifierType,
    BarcodeType,
    CardProvider,
    KeyAlgorithm,
    PaymentMethod,
    PaymentType,
    ReceiptFormat,
    ReceiptStatus,
    ReceiverType,
    RecipientEntityType,
    RefundPreference,
    ReturnCondition,
    UnitCode,
    VatRegime,
)
from cheqi.models.envelopes import (
    ConsumingPartyEnvelope,
    DeliveryStatus,
    ReceiptCreatedResponse,
    ReceiptEnvelope,
    ReceiptResult,
)
from cheqi.models.matching import (
    IdentificationDetails,
    Recipient,
    RecipientResolutionResponse,
)
from cheqi.models.payment import CardDetails, Payment, PaymentAccountDetails
from cheqi.models.receipt import (
    Address,
    Barcode,
    Charge,
    CheqiReceipt,
    CompanyIdentifier,
    Discount,
    Identifier,
    ItemClassification,
    PaymentInfo,
    Period,
    Product,
    ReceiptTemplateRequest,
    ReceiptTemplateResponse,
    ReceivingParty,
    SellingParty,
    Tax,
    VatMetadata,
)

__all__ = [
    "CheqiBaseModel",
    "CheqiDecimal",
    # Receipt models
    "Product",
    "Tax",
    "Discount",
    "Charge",
    "Barcode",
    "Period",
    "Identifier",
    "ItemClassification",
    "Address",
    "SellingParty",
    "ReceivingParty",
    "CompanyIdentifier",
    "PaymentInfo",
    "CheqiReceipt",
    "VatMetadata",
    "ReceiptTemplateRequest",
    "ReceiptTemplateResponse",
    # Payment
    "Payment",
    "CardDetails",
    "PaymentAccountDetails",
    # Matching
    "IdentificationDetails",
    "Recipient",
    "RecipientResolutionResponse",
    # Encryption
    "EncryptedReceipt",
    "EncryptedReceiptRequestDto",
    "EncryptedReceiptsRequest",
    # Envelopes & results
    "ReceiptEnvelope",
    "ConsumingPartyEnvelope",
    "ReceiptCreatedResponse",
    "DeliveryStatus",
    "ReceiptResult",
    # Company
    "Company",
    "CompanyAddress",
    "Store",
    "CreateStoreRequest",
    "ProvisionCompanyRequest",
    "ProvisionCompanyResponse",
    # Credit note
    "CheqiCreditNote",
    "CreditNoteTemplateRequest",
    "CreditNoteTemplateGenerationRequest",
    "CreditNoteTemplateResponse",
    "CreditNoteEnvelope",
    "EncryptedCreditNote",
    "EncryptedCreditNotesRequest",
    "EncryptedCreditNoteInitiationRequest",
    "CreditNoteCreatedResponse",
    "CreditNoteResult",
    "CreditNoteInitiationRequest",
    "ReturnLineItem",
    "RefundBankAccount",
    # Enums
    "PaymentMethod",
    "PaymentType",
    "CardProvider",
    "ReceiptStatus",
    "ReceiptFormat",
    "ReceiverType",
    "RecipientEntityType",
    "VatRegime",
    "AccountIdentifierType",
    "BarcodeType",
    "KeyAlgorithm",
    "UnitCode",
    "ReturnCondition",
    "RefundPreference",
]
