from pydantic import BaseModel, Field, field_validator
from typing import Optional, List, Literal
from decimal import Decimal
from datetime import datetime

ALLOWED_DISCOUNT_TYPES = {"percentage", "amount"}


class DiscountCreate(BaseModel):
    title: str = Field(..., max_length=100)
    description: Optional[str] = Field(None, max_length=500)
    discount_type: Literal["percentage", "amount"]
    discount_value: Decimal = Field(..., ge=0)
    is_active: bool = True


class DiscountUpdate(BaseModel):
    title: Optional[str] = Field(None, max_length=100)
    description: Optional[str] = Field(None, max_length=500)
    discount_type: Optional[Literal["percentage", "amount"]] = None
    discount_value: Optional[Decimal] = Field(None, ge=0)
    is_active: Optional[bool] = None


class DiscountResponse(BaseModel):
    id: int
    discount_id: Optional[str] = None
    title: str
    description: Optional[str] = None
    discount_type: str
    discount_value: Optional[int] = None
    is_active: Optional[bool] = None
    created_at: datetime

    class Config:
        from_attributes = True


class SeedSettingsRequest(BaseModel):
    merchant_id: int
    groups: Optional[List[str]] = None
    overwrite: bool = False


class SeedSettingsResponse(BaseModel):
    merchant_id: int
    seeded: int
    skipped: int
    groups: List[str]


class ResetSettingsRequest(BaseModel):
    groups: List[str]


class ResetSettingsResponse(BaseModel):
    reset_groups: List[str]
    settings: dict
