from typing import Optional
from api_validations.core_validations import BaseModelRegular
from api_validations.validations_request import (
    PydanticBaseModel,
    PydanticBaseModelValidation,
    ListOptions,
)

class DecisionBookDecisionBookInvitationsValidation:
    tr = {
        "build_decision_book_uu_id": "Karar Defteri UUID",
        "message": "Mesaj",
        "planned_date": "Planlanan Tarih",
    }
    en = {
        "build_decision_book_uu_id": "Decision Book UUID",
        "message": "Message",
        "planned_date": "Planned Date",
    }


class DecisionBookDecisionBookInvitations(BaseModelRegular, DecisionBookDecisionBookInvitationsValidation):
    build_decision_book_uu_id: str
    message: str
    planned_date: str


class DecisionBookDecisionBookInvitationsAttendValidation:
    tr = {
        "token": "Token",
        "is_attend": "Katılacak mı?",
    }
    en = {
        "token": "Token",
        "is_attend": "Is Attend?",
    }


class DecisionBookDecisionBookInvitationsAttend(BaseModelRegular, DecisionBookDecisionBookInvitationsAttendValidation):
    token: str
    is_attend: bool


class DecisionBookDecisionBookInvitationsAssignValidation:
    tr = {
        "token": "Token",
        "build_living_space_uu_id": "Yapı Yaşam Alanı UUID",
        "occupant_type_uu_id": "Sakin Tipi UUID",
    }
    en = {
        "token": "Token",
        "build_living_space_uu_id": "Build Living Space UUID",
        "occupant_type_uu_id": "Occupant Type UUID",
    }

class DecisionBookDecisionBookInvitationsAssign(BaseModelRegular, DecisionBookDecisionBookInvitationsAssignValidation):
    token: str
    build_living_space_uu_id: str
    occupant_type_uu_id: str


class DecisionBookDecisionBookInvitationsUpdateValidation:
    tr = {
        **PydanticBaseModelValidation.tr,
        "token": "Token",
        "occupant_type_uu_id": "Sakin Tipi UUID",
    }
    en = {
        **PydanticBaseModelValidation.en,
        "token": "Token",
        "occupant_type_uu_id": "Occupant Type UUID",
    }

class DecisionBookDecisionBookInvitationsUpdate(PydanticBaseModel, DecisionBookDecisionBookInvitationsUpdateValidation):
    token: str
    occupant_type_uu_id: Optional[str] = None


class ListDecisionBookValidation:
    tr = {
        "build_decision_book_uu_id": "Karar Defteri UUID",
    }
    en = {
        "build_decision_book_uu_id": "Decision Book UUID",
    }

class ListDecisionBook(ListOptions, ListDecisionBookValidation):
    build_decision_book_uu_id: Optional[str] = None


class InsertDecisionBookValidation:
    tr = {
        **PydanticBaseModelValidation.tr,
        "build_uu_id": "Yapı UUID",
        "decision_type": "Karar Tipi",
        "meeting_date": "Toplantı Tarihi",
        "is_out_sourced": "Dış Kaynak mı?",
        "resp_company_fix_wage": "Firma Sabit Ücreti",
        "resp_company_uu_id": "Firma UUID",
    }
    en = {
        **PydanticBaseModelValidation.en,
        "build_uu_id": "Build UUID",
        "decision_type": "Decision Type",
        "meeting_date": "Meeting Date",
        "is_out_sourced": "Is Out Sourced?",
        "resp_company_fix_wage": "Company Fixed Wage",
        "resp_company_uu_id": "Company UUID",
    }

class InsertDecisionBook(PydanticBaseModel, InsertDecisionBookValidation):
    build_uu_id: str
    decision_type: str
    meeting_date: str
    is_out_sourced: bool

    resp_company_fix_wage: Optional[float] = None
    resp_company_uu_id: Optional[str] = None


class InsertDecisionBookCompletedValidation:
    tr = {
        "build_decision_book_uu_id": "Karar Defteri UUID",
        "meeting_completed_date": "Toplantı Tamamlanma Tarihi",
    }
    en = {
        "build_decision_book_uu_id": "Decision Book UUID",
        "meeting_completed_date": "Meeting Completed Date",
    }


class InsertDecisionBookCompleted(BaseModelRegular, InsertDecisionBookCompletedValidation):
    build_decision_book_uu_id: str
    meeting_completed_date: str


class InsertDecisionBookPersonValidation:
    tr = {
        "person_uu_id": "Kişi UUID",
        "build_decision_book_uu_id": "Karar Defteri UUID",
        "management_typecode_uu_id": "Yönetim Tipi UUID",
        "dues_discount_approval_date": "Aidat İndirim Onay Tarihi",
        "dues_fix_discount": "Aidat Sabit İndirim",
        "dues_percent_discount": "Aidat Yüzde İndirim",
    }
    en = {
        "person_uu_id": "Person UUID",
        "build_decision_book_uu_id": "Decision Book UUID",
        "management_typecode_uu_id": "Management Type UUID",
        "dues_discount_approval_date": "Dues Discount Approval Date",
        "dues_fix_discount": "Dues Fix Discount",
        "dues_percent_discount": "Dues Percent Discount",
    }


class InsertDecisionBookPerson(BaseModelRegular, InsertDecisionBookPersonValidation):
    person_uu_id: str
    build_decision_book_uu_id: str
    management_typecode_uu_id: str

    dues_discount_approval_date: Optional[str] = None
    dues_fix_discount: Optional[float] = None
    dues_percent_discount: Optional[int] = None


class UpdateDecisionBookPersonValidation:
    tr = {
        **PydanticBaseModelValidation.tr,
        "dues_fix_discount": "Aidat Sabit İndirim",
        "dues_percent_discount": "Aidat Yüzde İndirim",
    }
    en = {
        **PydanticBaseModelValidation.en,
        "dues_fix_discount": "Dues Fix Discount",
        "dues_percent_discount": "Dues Percent Discount",
    }


class UpdateDecisionBookPerson(PydanticBaseModel, UpdateDecisionBookPersonValidation):

    dues_fix_discount: Optional[float] = None
    dues_percent_discount: Optional[int] = None


class RemoveDecisionBookPersonValidation:
    tr = {
        "person_uu_id": "Kişi UUID",
        "build_decision_book_person_uu_id": "Karar Defteri Kişi UUID",
    }
    en = {
        "person_uu_id": "Person UUID",
        "build_decision_book_person_uu_id": "Decision Book Person UUID",
    }


class RemoveDecisionBookPerson(PydanticBaseModel, RemoveDecisionBookPersonValidation):
    person_uu_id: str
    build_decision_book_person_uu_id: str


class UpdateDecisionBookValidation:
    tr = {
        **PydanticBaseModelValidation.tr,
        "decision_book_pdf_path": "Karar Defteri PDF Yolu",
        "is_out_sourced": "Dış Kaynak mı?",
        "contact_agreement_path": "İletişim Anlaşma Yolu",
        "contact_agreement_date": "İletişim Anlaşma Tarihi",
        "meeting_date": "Toplantı Tarihi",
        "decision_type": "Karar Tipi",
        "resp_company_fix_wage": "Firma Sabit Ücreti",
        "resp_company_uu_id": "Firma UUID",
    }
    en = {
        **PydanticBaseModelValidation.en,
        "decision_book_pdf_path": "Decision Book PDF Path",
        "is_out_sourced": "Is Out Sourced?",
        "contact_agreement_path": "Contact Agreement Path",
        "contact_agreement_date": "Contact Agreement Date",
        "meeting_date": "Meeting Date",
        "decision_type": "Decision Type",
        "resp_company_fix_wage": "Company Fixed Wage",
        "resp_company_uu_id": "Company UUID",
    }


class UpdateDecisionBook(PydanticBaseModel, UpdateDecisionBookValidation):
    decision_book_pdf_path: Optional[str] = None
    is_out_sourced: Optional[bool] = None
    contact_agreement_path: Optional[str] = None
    contact_agreement_date: Optional[str] = None
    meeting_date: Optional[str] = None
    decision_type: Optional[str] = None

    resp_company_fix_wage: Optional[float] = None
    resp_company_uu_id: Optional[str] = None


class InsertBuildDecisionBookItemsValidation:
    tr = {
        "token": "Token",
        "info_type_uu_id": "Bilgi Tipi UUID",
        "item_comment": "Öğe Yorumu / Açıklama",
        "currency": "Para Birimi",
        "unit_type": "Birim Tipi",
        "debit_start_date": "Borç Başlangıç Tarihi",
        "debit_end_date": "Borç Bitiş Tarihi",
        "unit_price_is_fixed": "Birim Fiyat Sabit mi?",
        "unit_price": "Birim Fiyat",
    }
    en = {
        "token": "Token",
        "info_type_uu_id": "Info Type UUID",
        "item_comment": "Item Comment",
        "currency": "Currency",
        "unit_type": "Unit Type",
        "debit_start_date": "Debit Start Date",
        "debit_end_date": "Debit End Date",
        "unit_price_is_fixed": "Unit Price Is Fixed?",
        "unit_price": "Unit Price",
    }


class InsertBuildDecisionBookItems(BaseModelRegular, InsertBuildDecisionBookItemsValidation):
    token: str
    info_type_uu_id: str
    item_comment: str

    currency: Optional[str] = "TL"
    unit_type: Optional[str] = "M2"
    debit_start_date: Optional[str] = None
    debit_end_date: Optional[str] = None
    unit_price_is_fixed: Optional[bool] = False
    unit_price: Optional[float] = 0.00

    # build_decision_book_uu_id: str
    # item_objection: Optional[str] = None


class UpdateBuildDecisionBookItemsValidation:
    tr = {
        **PydanticBaseModelValidation.tr,
        "item_comment": "Öğe Yorumu / Açıklama",
        "item_objection": "Öğe İtirazı",
    }
    en = {
        **PydanticBaseModelValidation.en,
        "item_comment": "Item Comment",
        "item_objection": "Item Objection",
    }

class UpdateBuildDecisionBookItems(PydanticBaseModel, UpdateBuildDecisionBookItemsValidation):
    item_comment: Optional[str] = None
    item_objection: Optional[str] = None


class InsertBuildDecisionBookItemDebitsValidation:
    tr = {
        "build_decision_book_item_uu_id": "Karar Defteri Öğe UUID",
        "dues_values": "Aidat Değerleri",
    }
    en = {
        "build_decision_book_item_uu_id": "Decision Book Item UUID",
        "dues_values": "Dues Values",
    }


class InsertBuildDecisionBookItemDebits(BaseModelRegular, InsertBuildDecisionBookItemDebitsValidation):
    build_decision_book_item_uu_id: str
    dues_values: dict
    # dues_types_uu_id: str
    # decision_taken: Optional[bool] = None


class UpdateBuildDecisionBookItemDebitsValidation:
    tr = {
        **PydanticBaseModelValidation.tr,
        "dues_types_uu_id": "Aidat Tipi UUID",
        "dues_values": "Aidat Değerleri",
        "decision_taken": "Karar Alındı mı?",
    }
    en = {
        **PydanticBaseModelValidation.en,
        "dues_types_uu_id": "Dues Type UUID",
        "dues_values": "Dues Values",
        "decision_taken": "Decision Taken?",
    }


class UpdateBuildDecisionBookItemDebits(PydanticBaseModel, UpdateBuildDecisionBookItemDebitsValidation):
    dues_types_uu_id: Optional[str] = None
    dues_values: Optional[dict] = None
    decision_taken: Optional[bool] = None
