"""AccountingEntry SQLModel model for proposed accounting entries."""

from datetime import datetime
from decimal import Decimal
from enum import Enum
from typing import Optional, TYPE_CHECKING

from sqlmodel import SQLModel, Field, Relationship

if TYPE_CHECKING:
    from .receipt import Receipt


class EntryType(str, Enum):
    """Type of accounting entry."""
    DEBIT = "debit"
    CREDIT = "credit"


class AccountingEntry(SQLModel, table=True):
    """Proposed accounting entry for a receipt."""

    __tablename__ = "accounting_entries"

    id: Optional[int] = Field(default=None, primary_key=True)
    receipt_id: int = Field(foreign_key="receipts.id", index=True)

    # Account
    entry_type: EntryType
    account_code: str = Field(max_length=20)  # e.g., 6022, 5311, 4426
    account_name: Optional[str] = Field(default=None, max_length=200)  # Cache: "Cheltuieli combustibil"

    # Amount
    amount: Decimal = Field(decimal_places=2, max_digits=15)

    # Analytics (optional)
    partner_id: Optional[int] = Field(default=None)
    cost_center_id: Optional[int] = Field(default=None)

    # Entry metadata
    is_auto_generated: bool = Field(default=True)  # True if system-generated
    modified_by: Optional[str] = Field(default=None, max_length=100)  # Username if modified
    modified_at: Optional[datetime] = Field(default=None)

    # Order for display
    sort_order: int = Field(default=0)

    # Relationship
    receipt: Optional["Receipt"] = Relationship(back_populates="entries")
