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

class BrandAttributeAssessment(CustomModel):
    brand_id : Optional[int] = 0
    define_research_methodology : Optional[str] = "N/A"
    name_top_10_attributes : Optional[str] = "N/A" 
    remarks : Optional[str] = "N/A"
    group_id : Optional[int] = 0

class BrandingAttributes(CustomModel):
    brand_id : Optional[int] = 0
    attributes : Optional[str] = "N/A"
    reference_retailer_1 : Optional[str] = "N/A"
    reference_retailer_2 : Optional[str] = "N/A"
    own_brand : Optional[str] = "N/A"
    brand_positioning_statement : Optional[str] = "N/A"
    group_id : Optional[int] = 0
    
class MarketingAndCommunication(CustomModel):
    integrated_id : Optional[int] = 0
    marketing_budget : Optional[float] = 0.0
    rational : Optional[str] = "N/A"
    group_id : Optional[int] = 0

class IntegratedMarketing(CustomModel):
    integrated_id : Optional[int] = 0
    activity_name : Optional[str] = "N/A"
    budget_allocated : Optional[float] = 0.0
    objective : Optional[str] = "N/A"
    measurment : Optional[str] = "N/A"
    target_shopper_journey : Optional[str] = "N/A"
    actions : Optional[str] = "N/A"
    group_id : Optional[int] = 0

class MarketingCompetitor(CustomModel):
    competitor_id : Optional[int] = 0
    name_of_the_reference_retailer : Optional[str] = "N/A"
    marketing_communication : Optional[str] = "N/A"
    plan_activities : Optional[str] = "N/A"
    group_id : Optional[int] = 0

class OptimisingAssets(CustomModel):
    optimising_id : Optional[int] = 0 
    space_resources_for_income : Optional[str] = "N/A"
    non_space_resources_for_income : Optional[str] = "N/A"
    percentage_of_sales : Optional[float] = 0.0
    predictions_around_changes : Optional[str] = "N/A"
    changes_in_marketing_communication : Optional[str] = "N/A"
    group_id : Optional[int] = 0

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

class Module7ReportPreview(CustomModel):
    group_id : int
    brand_attribute_assessment : BrandAttributeAssessment
    branding_attributes : BrandingAttributes
    marketing_and_communication : MarketingAndCommunication
    integrated_marketing : List[IntegratedMarketing]
    marketing_competitor : MarketingCompetitor
    optimising_assets : List[OptimisingAssets]
    summary : Summary
    last_updated : datetime
