"""Shared SnelStart integration models."""

from __future__ import annotations

from dataclasses import dataclass
from typing import Any, Literal

SnelStartConnectionStatus = Literal[
    "not_connected",
    "pending",
    "connected",
    "error",
    "disconnected",
]

CONNECTION_STATUSES: frozenset[str] = frozenset(
    {"not_connected", "pending", "connected", "error", "disconnected"}
)


@dataclass(frozen=True)
class SnelStartConnectionInfo:
    clientId: str
    status: SnelStartConnectionStatus
    externalAdministrationId: str | None = None
    lastSyncAt: str | None = None
    lastSyncError: str | None = None
    integrationEnabled: bool = False
    isConnected: bool = False

    def to_public_dict(self) -> dict[str, Any]:
        return {
            "clientId": self.clientId,
            "status": self.status,
            "externalAdministrationId": self.externalAdministrationId,
            "lastSyncAt": self.lastSyncAt,
            "lastSyncError": self.lastSyncError,
            "integrationEnabled": self.integrationEnabled,
            "isConnected": self.isConnected,
        }


@dataclass(frozen=True)
class BankImportRow:
    external_id: str
    transaction_date: str
    description: str
    amount: float
    currency: str = "EUR"
    transaction_type: str = "payment"
    bank_account: str = ""
    iban: str = ""
    payment_reference: str = ""
    source: str = "snelstart"


@dataclass(frozen=True)
class BankImportResult:
    imported: int
    clientsChecked: int
    connectedClients: int
    integrationEnabled: bool
    message: str


@dataclass(frozen=True)
class InvoicePushResult:
    externalInvoiceId: str
    syncedAt: str


@dataclass(frozen=True)
class FinancialSummary:
    integrationRequired: bool
    revenue: float | None = None
    costs: float | None = None
    netProfit: float | None = None
    message: str | None = None
