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

class Module10MetricsData(BaseModel):
    # Summary Statistics
    total_sessions: int = 0
    total_metrics: int = 0
    years_covered: int = 12
    currency: str = "Rs in Lacs"
    
    # General Metrics (Overall) - Sales for Y1-Y12
    sales_y1: float = 0.0
    sales_y2: float = 0.0
    sales_y3: float = 0.0
    sales_y4: float = 0.0
    sales_y5: float = 0.0
    sales_y6: float = 0.0
    sales_y7: float = 0.0
    sales_y8: float = 0.0
    sales_y9: float = 0.0
    sales_y10: float = 0.0
    sales_y11: float = 0.0
    sales_y12: float = 0.0
    
    # Gross Margin for Y1-Y12
    gross_margin_y1: float = 0.0
    gross_margin_y2: float = 0.0
    gross_margin_y3: float = 0.0
    gross_margin_y4: float = 0.0
    gross_margin_y5: float = 0.0
    gross_margin_y6: float = 0.0
    gross_margin_y7: float = 0.0
    gross_margin_y8: float = 0.0
    gross_margin_y9: float = 0.0
    gross_margin_y10: float = 0.0
    gross_margin_y11: float = 0.0
    gross_margin_y12: float = 0.0
    
    # Operating Expenses for Y1-Y12
    operating_expenses_y1: float = 0.0
    operating_expenses_y2: float = 0.0
    operating_expenses_y3: float = 0.0
    operating_expenses_y4: float = 0.0
    operating_expenses_y5: float = 0.0
    operating_expenses_y6: float = 0.0
    operating_expenses_y7: float = 0.0
    operating_expenses_y8: float = 0.0
    operating_expenses_y9: float = 0.0
    operating_expenses_y10: float = 0.0
    operating_expenses_y11: float = 0.0
    operating_expenses_y12: float = 0.0
    
    # Store-Wise Metrics (Store Format A) - GMROI for Y1-Y12
    gmroi_a_y1: float = 0.0
    gmroi_a_y2: float = 0.0
    gmroi_a_y3: float = 0.0
    gmroi_a_y4: float = 0.0
    gmroi_a_y5: float = 0.0
    gmroi_a_y6: float = 0.0
    gmroi_a_y7: float = 0.0
    gmroi_a_y8: float = 0.0
    gmroi_a_y9: float = 0.0
    gmroi_a_y10: float = 0.0
    gmroi_a_y11: float = 0.0
    gmroi_a_y12: float = 0.0
    
    # Sales per Square Feet for Y1-Y12
    sales_per_sqft_a_y1: float = 0.0
    sales_per_sqft_a_y2: float = 0.0
    sales_per_sqft_a_y3: float = 0.0
    sales_per_sqft_a_y4: float = 0.0
    sales_per_sqft_a_y5: float = 0.0
    sales_per_sqft_a_y6: float = 0.0
    sales_per_sqft_a_y7: float = 0.0
    sales_per_sqft_a_y8: float = 0.0
    sales_per_sqft_a_y9: float = 0.0
    sales_per_sqft_a_y10: float = 0.0
    sales_per_sqft_a_y11: float = 0.0
    sales_per_sqft_a_y12: float = 0.0

class ExpandedPerformanceMetrics(BaseModel):
    expanded_id: Optional[int] = 0
    name_of_kpi: Optional[str] = "N/A"
    rational_for_selection: Optional[str] = "N/A"
    expected_output: Optional[str] = "N/A"
    group_id: Optional[int] = 0

class Module10ReportRequest(BaseModel):
    group_id: int
    report_format: str = "pdf"

class Module10ReportResponse(BaseModel):
    report_id: str
    file_name: str
    file_size: int
    generation_time: datetime
    report_type: str = "module_10_metrics"
    status: str

class Module10ReportPreview(BaseModel):
    group_id: int
    metrics_data: Module10MetricsData
    expanded_performance_metrics: List[ExpandedPerformanceMetrics]
    summary: Optional[dict] = None
    last_updated: datetime