from __future__ import annotations

from typing import Any

from pydantic import BaseModel, Field


class EntityLink(BaseModel):
    relation: str
    target_entity: str
    target_id: str
    source_field: str | None = None


class CanonicalEntity(BaseModel):
    source_entity: str
    source_id: str
    display_name: str
    attributes: dict[str, Any] = Field(default_factory=dict)
    links: list[EntityLink] = Field(default_factory=list)


class Organization(CanonicalEntity):
    pass


class Counterparty(CanonicalEntity):
    pass


class Contract(CanonicalEntity):
    pass


class Account(CanonicalEntity):
    pass


class Subconto(CanonicalEntity):
    pass


class ResponsiblePerson(CanonicalEntity):
    pass


class Currency(CanonicalEntity):
    pass


class Warehouse(CanonicalEntity):
    pass


class CashflowArticle(CanonicalEntity):
    pass


class Department(CanonicalEntity):
    pass


class Individual(CanonicalEntity):
    pass


class Item(CanonicalEntity):
    pass


class BankAccount(CanonicalEntity):
    pass


class Document(CanonicalEntity):
    pass


class InvoiceDocument(Document):
    pass


class Posting(CanonicalEntity):
    pass


class RegisterMovement(CanonicalEntity):
    pass


class RegisterRecord(CanonicalEntity):
    pass


class Period(CanonicalEntity):
    pass
