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


# Section 2: Supply Chain - tbl_adapting_supply_chain
class SupplyChainAdaptation(CustomModel):
    adapting_id: Optional[int] = 0
    what_are_some_categories: Optional[str] = "N/A"
    remarks_about_these_categories: Optional[str] = "N/A"
    do_you_think_you_need: Optional[str] = "N/A"
    at_which_point_and_why: Optional[str] = "N/A"
    group_id: Optional[int] = 0


# Section 3: Inventory - tbl_category_wish_inventory
class CategoryInventory(CustomModel):
    category_wish_id: Optional[int] = 0
    inventory: Optional[int] = 0
    credit_period: Optional[int] = 0
    group_id: Optional[int] = 0


# Section 3: Inventory - tbl_cash_conversion_cycle
class CashConversionCycle(CustomModel):
    cash_id: Optional[int] = 0
    inventory_purchase_timing: Optional[str] = "N/A"
    sales_to_cash_gap: Optional[str] = "N/A"
    cash_flow_challenges: Optional[str] = "N/A"
    group_id: Optional[int] = 0


# Section 3: Inventory - tbl_shrinkage_areas_reasons
class ShrinkageData(CustomModel):
    shrinkage_id: Optional[int] = 0
    shrinkage: Optional[float] = 0.0
    shrinkage_do_you_envision: Optional[str] = "N/A"
    shrinkage_in_your_stores: Optional[str] = "N/A"
    group_id: Optional[int] = 0


# Section 4: Online Distribution - tbl_comparative_analysis
class ComparativeAnalysis(CustomModel):
    comparative_id: Optional[int] = 0
    attributes: Optional[str] = "N/A"
    own_brand_physical_store: Optional[str] = "N/A"
    own_brand_online_store: Optional[str] = "N/A"
    group_id: Optional[int] = 0


# Section 4: Online Distribution - tbl_online_pre_select_service
class OnlinePreSelectService(CustomModel):
    online_id: Optional[int] = 0
    type: Optional[str] = "N/A"
    check_box: Optional[str] = "N/A"
    group_id: Optional[int] = 0


# Section 5: Costs - tbl_sales
class OnlineSales(CustomModel):
    sales_id: Optional[int] = 0
    average_traffic_expected: Optional[int] = 0
    average_remark: Optional[str] = "N/A"
    number_of_transaction_per_month: Optional[int] = 0
    number_remark: Optional[str] = "N/A"
    average_transaction_value: Optional[float] = 0.0
    transaction_remark: Optional[str] = "N/A"
    cogs: Optional[float] = 0.0
    cogs_remark: Optional[str] = "N/A"
    group_id: Optional[int] = 0


# Section 5: Costs - tbl_digital_asset
class DigitalAsset(CustomModel):
    digital_id: Optional[int] = 0
    item: Optional[str] = "N/A"
    estimate_cost: Optional[float] = 0.0
    remark: Optional[str] = "N/A"
    group_id: Optional[int] = 0


# Section 5: Costs - tbl_recurring_operating
class RecurringOperating(CustomModel):
    recurring_id: Optional[int] = 0
    expenses_type: Optional[str] = "N/A"
    percentage_of__sales: Optional[float] = 0.0
    remarks: Optional[str] = "N/A"
    group_id: Optional[int] = 0


# Section 6: Summary - tbl_summary
class Summary(CustomModel):
    summary_id: Optional[int] = 0
    backend_submissions: Optional[str] = "N/A"
    backend_summarise: Optional[str] = "N/A"
    group_id: Optional[int] = 0


class Module9ReportPreview(CustomModel):
    group_id: int
    supply_chain_adaptation: List[SupplyChainAdaptation]
    category_inventory: List[CategoryInventory]
    cash_conversion_cycle: Optional[CashConversionCycle]
    shrinkage_data: Optional[ShrinkageData]
    comparative_analysis: List[ComparativeAnalysis]
    online_pre_select_service: List[OnlinePreSelectService]
    online_sales: Optional[OnlineSales]
    digital_asset: List[DigitalAsset]
    recurring_operating: List[RecurringOperating]
    summary: Optional[Summary]
    last_updated: datetime