from datetime import datetime
from pydantic import BaseModel, ConfigDict
from typing import Any, Optional


class DiscountCouponBase(BaseModel):
    code: str
    description: Optional[str] = None
    status: bool = True
    uses_per_customer: int = 1
    start_date: datetime
    end_date: datetime
    discount_type: str  # 'fixed' or 'percentage'
    discount_value: float
    max_discount: Optional[float] = None
    min_cart_value: Optional[float] = None
    rule_type: Optional[bool] = False
    is_applicable_for_course: Optional[bool] = False
    is_applicable_for_event: Optional[bool] = False

class DiscountCouponCreate(DiscountCouponBase):
    pass

class DiscountCouponUpdate(DiscountCouponBase):
    pass
    
class DiscountCoupon(DiscountCouponBase):
    id: int
    created_at: datetime
    updated_at: datetime
    model_config = ConfigDict(from_attributes=True)
    
class DiscountCouponResponse(DiscountCoupon):
    pass

class DiscountCouponValidationResponse(BaseModel):
    valid: bool
    message: Optional[str] = None
    discount_amount: Optional[float] = None
    #coupon: Optional[DiscountCoupon] = None
    coupon: Optional[Any] = None