from typing import List, Optional
from datetime import datetime
from app.utils.schemas_utils import CustomModel

class CorporateConceptOffice(CustomModel):
    corporate_id: Optional[int] = 0
    role_category: Optional[str] = "N/A"
    cost_to_company: Optional[float] = 0.0
    y1: Optional[int] = 0
    y2: Optional[int] = 0
    y3: Optional[int] = 0
    y4: Optional[int] = 0
    y5: Optional[int] = 0
    group_id: Optional[int] = 0

class ConceptOffice(CustomModel):
    concept_id: Optional[int] = 0
    role_category: Optional[str] = "N/A"
    cost_to_company: Optional[float] = 0.0
    y1: Optional[int] = 0
    y2: Optional[int] = 0
    y3: Optional[int] = 0
    y4: Optional[int] = 0
    y5: Optional[int] = 0
    group_id: Optional[int] = 0

class StoreLevelStaffNeeds(CustomModel):
    store_id: Optional[int] = 0
    designation: Optional[str] = "N/A"
    average_salary: Optional[float] = 0.0
    count: Optional[int] = 0
    store_formate_type: Optional[str] = "N/A"
    format_a_count: Optional[int] = 0
    format_b_count: Optional[int] = 0
    group_id: Optional[int] = 0

class TrainingTalentManagement(CustomModel):
    competitor_id: Optional[int] = 0
    name_of_reference_retailer: Optional[str] = "N/A"
    employee_management_activity: Optional[str] = "N/A"
    policeis_plan_activities: Optional[str] = "N/A"
    group_id: Optional[int] = 0

class Utility(CustomModel):
    utility_id: Optional[int] = 0
    utility_name: Optional[str] = "N/A"
    cost_per_month: Optional[float] = 0.0
    key_usage_parameters: Optional[str] = "N/A"
    remark: Optional[str] = "N/A"
    store_format_type: Optional[str] = "N/A"
    group_id: Optional[int] = 0

class OperatingExpenses(CustomModel):
    operating_id: Optional[int] = 0
    operating_expenses_type: Optional[str] = "N/A"
    percentage_of_sales_per_year: Optional[float] = 0.0
    remark: Optional[str] = "N/A"
    store_format_type: Optional[str] = "N/A"
    group_id: Optional[int] = 0

class Summary(CustomModel):
    summary_id: Optional[int] = 0
    service_submissions: Optional[str] = "N/A"
    service_summarise: Optional[str] = "N/A"
    group_id: Optional[int] = 0

class Module8ReportPreview(CustomModel):
    group_id: int
    corporate_concept_office: List[CorporateConceptOffice]
    concept_office: List[ConceptOffice]
    store_level_staff_needs: List[StoreLevelStaffNeeds]
    training_talent_management: TrainingTalentManagement
    utilities: List[Utility]
    operating_expenses: List[OperatingExpenses]
    summary: Summary
    last_updated: datetime