from pydantic import BaseModel, Field
from typing import List, Optional
from datetime import datetime


# Based on TblVendorMetricsPriorityList
class VendorPriorityMatrix(BaseModel):
    vendor_id: Optional[int] = None
    priority: Optional[int] = None
    area: Optional[str] = None
    metrics: Optional[str] = None
    remarks: Optional[str] = None
    group_id: Optional[int] = None


# Based on TblVendorScorecard
class VendorScorecard(BaseModel):
    vendor_scorecard_id: Optional[int] = None
    metric: Optional[str] = None
    weightage: Optional[float] = None
    importance: Optional[str] = None
    batna: Optional[str] = None
    group_id: Optional[int] = None


# Based on TblPrivateLablling
class PrivateLabelling(BaseModel):
    private_id: Optional[int] = None
    category_name: Optional[str] = None
    private_label: Optional[str] = None
    rational: Optional[str] = None  # Note: database field is 'rational'
    group_id: Optional[int] = None


# Based on TblCategoryCaptinshipPlanning
class CategoryCaptainship(BaseModel):
    category_plan_id: Optional[int] = None
    category_name: Optional[str] = None
    category_captinship: Optional[str] = None  # Note: database field is 'category_captinship'
    rational: Optional[str] = None  # Note: database field is 'rational'
    group_id: Optional[int] = None


# Primary Research - no specific table
class PrimaryResearch(BaseModel):
    profiles_interviewed: Optional[str] = None
    insights_gathered: Optional[str] = None


# Damage and Expiry - no specific table, based on UI requirements
class DamageExpiry(BaseModel):
    negotiation_strategy: Optional[str] = None  
    recovery_percentage: Optional[float] = None  # "What percentage of sales do you estimate to generate income as recovery from damage and expiry?"
    predictions: Optional[str] = None  # "What are some predictions around such issues for your store in terms of frequency of occurrence and reasons for it?"


# Based on TblSummary (using category fields)
class Summary(BaseModel):
    summary_id: Optional[int] = None
    store_submissions: Optional[str] = None
    store_summarise: Optional[str] = None
    location_submissions: Optional[str] = None
    location_summarise: Optional[str] = None
    network_submissions: Optional[str] = None
    network_summarise: Optional[str] = None
    category_submissions: Optional[str] = None
    category_summarise: Optional[str] = None
    promotions_submissions: Optional[str] = None
    promotions_summarise: Optional[str] = None
    marketing_submissions: Optional[str] = None
    marketing_summarise: Optional[str] = None
    service_submissions: Optional[str] = None
    service_summarise: Optional[str] = None
    backend_submissions: Optional[str] = None
    backend_summarise: Optional[str] = None
    metrics_submissions: Optional[str] = None
    metrics_summarise: Optional[str] = None
    group_id: Optional[int] = None


class Module5ReportPreview(BaseModel):
    group_id: int
    primary_research: PrimaryResearch = Field(default_factory=PrimaryResearch)
    vendor_priority_matrix: List[VendorPriorityMatrix] = Field(default_factory=list)
    vendor_scorecard: List[VendorScorecard] = Field(default_factory=list)
    damage_expiry: DamageExpiry = Field(default_factory=DamageExpiry)
    private_labelling: List[PrivateLabelling] = Field(default_factory=list)
    category_captainship: List[CategoryCaptainship] = Field(default_factory=list)
    summary: Summary = Field(default_factory=Summary)
    last_updated: datetime