from pydantic import BaseModel
from typing import List


class Address(BaseModel):
    address: str | None = ""
    zipcode: str | None = ""
    city: str | None = ""


class Contact(BaseModel):
    role: str | None = ""
    name: str | None = ""
    phone: str | None = ""
    second_phone: str | None = ""
    email: str | None = ""


class GPS(BaseModel):
    longitude: str | None = ""
    latitude: str | None = ""


class Syndic(BaseModel):
    name: str | None = ""
    address: Address | None = None
    phone: str | None = ""
    email: str | None = ""


class MaintenanceFrequency(BaseModel):
    month: str | None = ""
    reccurence: str | None = ""
    period: str | None = ""


class Maintenance(BaseModel):
    days: list[str] | None = None
    hour: str | None = ""
    duration: str | None = ""
    frequency: List[MaintenanceFrequency] | None = None
    contract_inclusion: List[str] | None = ""
    contract_inclusion_note: str | None = ""
    easiflo_type: str | None = ""


class Client(BaseModel):
    site: str
    sector: str
    user_sub: str | None = None
    client_type: str
    name: str
    address: Address | None = None
    contacts: List[Contact] | None = None
    gps: GPS | None = None
    access: List[str]
    access_note: str
    syndic: Syndic
    contract_date: str
    maintenance_info: Maintenance | None = None


class UpdateClient(BaseModel):
    site: str | None = None
    sector: str | None = None
    user_sub: str | None = None
    client_type: str | None = None
    name: str | None = None
    address: Address | None = None
    contacts: List[Contact] | None = None
    gps: GPS | None = None
    access: List[str] | None = None
    access_note: str | None = None
    syndic: Syndic | None = None
    contract_date: str | None = None
    maintenance_info: Maintenance | None = None
