import uuid from datetime import datetime from typing import Optional, List, Literal import pydantic from pydantic import Field from core.models.base import BaseModel class AddendumModel(pydantic.BaseModel): id: Optional[uuid.UUID] = Field(description="کد شناسایی الحاقیه") number: Optional[str] = Field(description="شماره الحاقیه") amount: Optional[int] = Field(description=' مبلغ الحاقیه') description: Optional[str] = Field(description='توضیحات') end_date: Optional[datetime] = Field(description='تاریخ پایان الحاقیه') created_at: Optional[datetime] = Field(description='تاریخ ایجاد رکورد') updated_at: Optional[datetime] = Field(description='تاریخ آخرین بروزرسانی رکورد') user_id: Optional[uuid.UUID] = Field(description='کد شناسایی کاربر در این فیلد قرار می گیرد') type: Optional[List[str]] = Field(description='نوع الحاقیه') class ExtensionModel(pydantic.BaseModel): id: Optional[uuid.UUID] = Field(description="کد شناسایی الحاقیه") created_at: Optional[datetime] = Field(description='تاریخ ایجاد رکورد') updated_at: Optional[datetime] = Field(description='تاریخ آخرین بروزرسانی رکورد') user_id: Optional[uuid.UUID] = Field(description='کد شناسایی کاربر در این فیلد قرار می گیرد') day_to_end: Optional[int] = Field(description='میزان روز مانده به پایان قرارداد') description: Optional[str] = Field(description='توضیحات') status:Optional[str] = Field(description='وضعیت تمدید پیمان') class ContractModel(BaseModel): id: Optional[uuid.UUID] = Field(alias='_id') project_id: uuid.UUID = Field(description='کد شناسایی پروژ') state: Optional[str] = Field(description='استان در این فیلد قرار می گیرد') city: Optional[str] = Field(description='شهر در این فیلد قرار می گیرد') project_code: Optional[str] = Field(description='کد در این فیلد قرار می گیرد') description: Optional[str] = Field(description='شرح قرارداد') number: Optional[str] = Field(description="شماره قرارداد") type:Optional[str] = Field(description=' نوع قرارداد') amount:Optional[int] = Field(description='مبلغ اولیه قرارداد') date_contract:Optional[datetime] = Field(description='تاریخ عقد قرارداد') end_date:Optional[datetime] = Field(description='تاریخ پایان قرارداد') notif_date:Optional[datetime] = Field(description='تاریخ ابلاغ قرارداد') name_employer:Optional[str] = Field(description='نام کارفرما') name_consultant:Optional[str] = Field(description='نام مشاور') collection:Optional[List[str]] = Field(description=""" 'ژئوتکنیک','طرح توجیحی','طراحی','نظارت کارگاهی','نظارت عالیه' """) addendum:Optional[List[AddendumModel]] = Field(description='الحاقیه') nature:Optional[str] = Field(description="""  طراحی  نظارت  برونسپاری """) basic_fee : Optional[int] = Field(description='حق الزحمه مبنا') meter : Optional[str] = Field(description='متراژ پروژه') extension : Optional[List[ExtensionModel]] = Field(description='وضعیت تمدید قرارداد')