from datetime import datetime
from typing import Optional
from sqlalchemy import String, Text, DateTime, func
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base


class Company(Base):
    __tablename__ = "companies"
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column(String(255), nullable=False)
    code: Mapped[str] = mapped_column(String(20), nullable=False, unique=True)  # for no_surat
    address: Mapped[Optional[str]] = mapped_column(Text)
    email: Mapped[Optional[str]] = mapped_column(String(255))
    phone: Mapped[Optional[str]] = mapped_column(String(50))
    nib: Mapped[Optional[str]] = mapped_column(String(100))
    letterhead: Mapped[Optional[str]] = mapped_column(Text)          # HTML from WYSIWYG
    director_signature: Mapped[Optional[str]] = mapped_column(Text)  # HTML from WYSIWYG
    manager_signature: Mapped[Optional[str]] = mapped_column(Text)   # HTML from WYSIWYG
    director_name: Mapped[Optional[str]] = mapped_column(String(255))
    director_title: Mapped[Optional[str]] = mapped_column(String(255))
    manager_name: Mapped[Optional[str]] = mapped_column(String(255))
    manager_title: Mapped[Optional[str]] = mapped_column(String(255))
    org_structure: Mapped[Optional[str]] = mapped_column(Text)       # HTML, internal only
    created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
    updated_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now(), onupdate=func.now())
