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


class CompetitorPricingAnalysis(CustomModel):
    competitor_id: Optional[int] = 0
    reference_competitor: Optional[str] = "N/A"
    pricing_strategy: Optional[str] = "N/A"
    which_category_generates_the_most_income_for_the_store: Optional[str] = "N/A"
    key_observation_around_pricing_in_the_store: Optional[str] = "N/A"
    other_remarks: Optional[str] = "N/A"
    group_id: Optional[int] = 0


class StoreFormatepricingStrategies(CustomModel):
    store_id: Optional[int] = 0
    store_format_type: Optional[str] = "N/A"
    choose_a_pricing_strategies: Optional[str] = "N/A"
    rational: Optional[str] = "N/A"
    specify_other_strategy: Optional[str] = "N/A"
    group_id: Optional[int] = 0


class CategoryPricingStrategis(CustomModel):
    category_id: Optional[int] = 0
    category: Optional[str] = "N/A"
    pricing_strategis: Optional[str] = "N/A"
    specify_other_strategy: Optional[str] = "N/A"
    rational: Optional[str] = "N/A"
    group_id: Optional[int] = 0


class DefineYourPromotions(CustomModel):
    define_id: Optional[int] = 0
    reference_competitor: Optional[str] = "N/A"
    ongoing_key_promotions: Optional[str] = "N/A"
    amoung_key_variouse_promotion: Optional[str] = "N/A"
    what_are_the_same_key: Optional[str] = "N/A"
    other_remark: Optional[str] = "N/A"
    group_id: Optional[int] = 0


class PromotionalCalendar(CustomModel):
    calendar_id: Optional[int] = 0
    month: Optional[str] = "N/A"
    category: Optional[str] = "N/A"
    type_of_promotion: Optional[str] = "N/A"
    success_metric: Optional[str] = "N/A"
    objective: Optional[str] = "N/A"
    remarks: Optional[str] = "N/A"
    group_id: Optional[int] = 0


class PromotionCompetitorAnalysis(CustomModel):
    promotion_id: Optional[int] = 0
    competitor_efforts: Optional[str] = "N/A"
    top_promotion_types: Optional[str] = "N/A"
    top_categories_for_promotions: Optional[str] = "N/A"
    spillover_categories: Optional[str] = "N/A"
    group_id: Optional[int] = 0


class RecoveryOfPromotional(CustomModel):
    recovery_id: Optional[int] = 0
    based_unterstanding: Optional[str] = "N/A"
    what_percentage: Optional[float] = 0.0
    what_category: Optional[str] = "N/A"
    group_id: Optional[int] = 0


class CategoriesUnderPromotions(CustomModel):
    categories_id: Optional[int] = 0
    on_which_category: Optional[dict] = {}
    group_id: Optional[int] = 0


class CustomerEngagement(CustomModel):
    customer_id: Optional[int] = 0
    promotions_submissions: Optional[str] = "N/A"
    promotions_summarise: Optional[str] = "N/A"
    group_id: Optional[int] = 0


class CompetitorLoyalty(CustomModel):
    competitor_id: Optional[int] = 0
    reference_competitor: Optional[str] = "N/A"
    do_they_have_a_loyalty_program: Optional[str] = "N/A"
    loyalty_program_type: Optional[str] = "N/A"
    key_observations_loyalty: Optional[str] = "N/A"
    is_it_useful_for_store: Optional[str] = "N/A"
    want_loyalty_program: Optional[str] = "N/A"
    describe_loyalty_program: Optional[str] = "N/A"
    budget_allocated: Optional[float] = 0.0
    benefits_of_loyalty_program: Optional[str] = "N/A"
    perils_of_loyalty_program: Optional[str] = "N/A"
    difference_from_competitor: Optional[str] = "N/A"
    other_notes: Optional[str] = "N/A"
    group_id: Optional[int] = 0


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


class Module6ReportPreview(CustomModel):
    group_id: int
    competitor_pricing_analysis: CompetitorPricingAnalysis
    store_format_pricing_strategis: List[StoreFormatepricingStrategies]
    category_pricing_strategis: List[CategoryPricingStrategis]
    define_your_promotions_strategy: DefineYourPromotions
    promotional_calendar: List[PromotionalCalendar]
    promotion_competitor_analysis: List[PromotionCompetitorAnalysis]
    recovery_of_promotional: RecoveryOfPromotional
    categories_under_promotions: CategoriesUnderPromotions
    customer_engagement: CustomerEngagement
    competitor_loyalty: CompetitorLoyalty
    summary: Summary
    last_updated: datetime
