from datetime import datetime
from typing import Optional
from pydantic import BaseModel


class CompanyCreate(BaseModel):
    name: str
    code: str
    address: Optional[str] = None
    email: Optional[str] = None
    phone: Optional[str] = None
    nib: Optional[str] = None
    letterhead: Optional[str] = None
    director_signature: Optional[str] = None
    manager_signature: Optional[str] = None
    director_name: Optional[str] = None
    director_title: Optional[str] = None
    manager_name: Optional[str] = None
    manager_title: Optional[str] = None
    org_structure: Optional[str] = None


class CompanyUpdate(BaseModel):
    name: Optional[str] = None
    code: Optional[str] = None
    address: Optional[str] = None
    email: Optional[str] = None
    phone: Optional[str] = None
    nib: Optional[str] = None
    letterhead: Optional[str] = None
    director_signature: Optional[str] = None
    manager_signature: Optional[str] = None
    director_name: Optional[str] = None
    director_title: Optional[str] = None
    manager_name: Optional[str] = None
    manager_title: Optional[str] = None
    org_structure: Optional[str] = None


class CompanyOut(BaseModel):
    id: int
    name: str
    code: str
    address: Optional[str]
    email: Optional[str]
    phone: Optional[str]
    nib: Optional[str]
    letterhead: Optional[str]
    director_signature: Optional[str]
    manager_signature: Optional[str]
    director_name: Optional[str]
    director_title: Optional[str]
    manager_name: Optional[str]
    manager_title: Optional[str]
    org_structure: Optional[str]
    created_at: datetime
    updated_at: datetime
    model_config = {"from_attributes": True}


class CompanyListOut(BaseModel):
    id: int
    name: str
    code: str
    created_at: datetime
    model_config = {"from_attributes": True}
