"""ECF DGII Python SDK - Client for the Dominican Republic Electronic Fiscal Receipts API."""

from .client import EcfClient, Environment, ENVIRONMENT_URLS
from .frontend_client import EcfFrontendClient, create_frontend_client
from .enums import (
    AllTipoECFTypes,
    CodificacionTipoImpuestosType,
    CodigoModificacionType,
    DGIIEnvironment,
    ECFType,
    EcfEstado,
    EcfProgress,
    EstadoType,
    FormaPagoType,
    IndicadorAgenteRetencionoPercepcionType,
    IndicadorBienoServicioType,
    IndicadorEnvioDiferidoType,
    IndicadorFacturacionDRType,
    IndicadorFacturacionType,
    IndicadorMontoGravadoType,
    IndicadorNorma1007Type,
    IndicadorServicioTodoIncluidoType,
    LiquidacionType,
    ProvinciaMunicipioType,
    TipoAfiliacionType,
    TipoAjusteType,
    TipoCuentaPagoType,
    TipoDescuentoRecargoType,
    TipoeCFType,
    TipoIngresosValidationType,
    TipoMonedaType,
    TipoPagoType,
    UnidadMedidaType,
    VersionType,
    ViaTransporteType,
)
from .exceptions import (
    EcfApiError,
    EcfAuthenticationError,
    EcfForbiddenError,
    EcfNotFoundError,
    EcfProcessingError,
    EcfServerError,
    EcfValidationError,
    PollingMaxRetriesError,
    PollingTimeoutError,
)
from .models import (
    AcecfReceptionRequestDto,
    AnulacionListResponse,
    AnulacionRequest,
    CertificateResponse,
    Comprador,
    CompanyResponse,
    DescuentoORecargo,
    DetalleAnulacionRequest,
    Directorio,
    ECF,
    EcfReceptionRequestDto,
    EcfResponse,
    Emisor,
    Encabezado,
    FormaDePago,
    IdDoc,
    ImpuestoAdicional,
    ImpuestoAdicional2,
    ImpuestoAdicionalOtraMoneda,
    InformacionesAdicionales,
    InformacionReferencia,
    Item,
    Mensaje,
    Mineria,
    NewCompanyApiKey,
    OtraMoneda,
    OtraMonedaDetalle,
    Pagina,
    PaginatedAcecfReceptionRequestDto,
    PaginatedAnulacionListResponse,
    PaginatedCompanyResponse,
    PaginatedEcfReceptionRequestDto,
    PaginatedEcfResponse,
    Retencion,
    RespuestaAnulacionRango,
    RespuestaConsultaEstado,
    RespuestaConsultaRFCE,
    RespuestaConsultaTimbre,
    RespuestaConsultaTrackId,
    RespuestaEstatusServicio,
    RespuestaVentanaDeMantenimiento,
    SecuenciaRequest,
    SendAcecfRequest,
    SubDescuento,
    SubRecargo,
    SubcantidadItem,
    Subtotal,
    SubtotalImpuestoAdicional,
    Token,
    Totales,
    Transporte,
    UpsertCompanyRequest,
)
from .polling import PollingOptions

__all__ = [
    # Client
    "EcfClient",
    "EcfFrontendClient",
    "create_frontend_client",
    "Environment",
    "ENVIRONMENT_URLS",
    "PollingOptions",
    # Enums
    "AllTipoECFTypes",
    "CodificacionTipoImpuestosType",
    "CodigoModificacionType",
    "DGIIEnvironment",
    "ECFType",
    "EcfEstado",
    "EcfProgress",
    "EstadoType",
    "FormaPagoType",
    "IndicadorAgenteRetencionoPercepcionType",
    "IndicadorBienoServicioType",
    "IndicadorEnvioDiferidoType",
    "IndicadorFacturacionDRType",
    "IndicadorFacturacionType",
    "IndicadorMontoGravadoType",
    "IndicadorNorma1007Type",
    "IndicadorServicioTodoIncluidoType",
    "LiquidacionType",
    "ProvinciaMunicipioType",
    "TipoAfiliacionType",
    "TipoAjusteType",
    "TipoCuentaPagoType",
    "TipoDescuentoRecargoType",
    "TipoeCFType",
    "TipoIngresosValidationType",
    "TipoMonedaType",
    "TipoPagoType",
    "UnidadMedidaType",
    "VersionType",
    "ViaTransporteType",
    # Exceptions
    "EcfApiError",
    "EcfAuthenticationError",
    "EcfForbiddenError",
    "EcfNotFoundError",
    "EcfProcessingError",
    "EcfServerError",
    "EcfValidationError",
    "PollingMaxRetriesError",
    "PollingTimeoutError",
    # Models
    "AcecfReceptionRequestDto",
    "AnulacionListResponse",
    "AnulacionRequest",
    "CertificateResponse",
    "Comprador",
    "CompanyResponse",
    "DescuentoORecargo",
    "DetalleAnulacionRequest",
    "Directorio",
    "ECF",
    "EcfReceptionRequestDto",
    "EcfResponse",
    "Emisor",
    "Encabezado",
    "FormaDePago",
    "IdDoc",
    "ImpuestoAdicional",
    "ImpuestoAdicional2",
    "ImpuestoAdicionalOtraMoneda",
    "InformacionesAdicionales",
    "InformacionReferencia",
    "Item",
    "Mensaje",
    "Mineria",
    "NewCompanyApiKey",
    "OtraMoneda",
    "OtraMonedaDetalle",
    "Pagina",
    "PaginatedAcecfReceptionRequestDto",
    "PaginatedAnulacionListResponse",
    "PaginatedCompanyResponse",
    "PaginatedEcfReceptionRequestDto",
    "PaginatedEcfResponse",
    "Retencion",
    "RespuestaAnulacionRango",
    "RespuestaConsultaEstado",
    "RespuestaConsultaRFCE",
    "RespuestaConsultaTimbre",
    "RespuestaConsultaTrackId",
    "RespuestaEstatusServicio",
    "RespuestaVentanaDeMantenimiento",
    "SecuenciaRequest",
    "SendAcecfRequest",
    "SubDescuento",
    "SubRecargo",
    "SubcantidadItem",
    "Subtotal",
    "SubtotalImpuestoAdicional",
    "Token",
    "Totales",
    "Transporte",
    "UpsertCompanyRequest",
]
