from datetime import datetime
from enum import Enum
from typing import Optional, List

from fastapi import UploadFile, File, Form
from pydantic import BaseModel, Field

class CartResponse:
    def __init__(
        self,
        name: Optional[str] = Form(None),
        description: Optional[str] = Form(None),
        parent_id: Optional[int] = Form(None),
        slug: Optional[str] = Form(None),
        meta_title: Optional[str] = Form(None),
        meta_description: Optional[str] = Form(None),
        meta_keywords: Optional[str] = Form(None),
        status: Optional[int] = Form(None, description="Статус категорії: 1 = enabled, 0 = disabled"),
    ):
        self.name = name
        self.description = description
        self.parent_id = parent_id
        self.slug = slug
        self.meta_title = meta_title
        self.meta_description = meta_description
        self.meta_keywords = meta_keywords
        self.status = status

class AddCartItem(BaseModel):
    product_id: int
    quantity: int

class AddProductsToCart(BaseModel):
    products: List[AddCartItem]

class EditCartProduct(BaseModel):
    quantity: Optional[int] = None
    store_id: Optional[int] = None

class SaveCart(BaseModel):
    name: str
    product_ids: Optional[List[int]] = None  # current_cart_product_id; якщо None — зберігаємо всі

class PublicCartResponse(BaseModel):
    cart_id: int
    name: str
    customer_id: int
    seo_keyword: str
    meta_title: Optional[str]
    meta_description: Optional[str]
    meta_keywords: Optional[str]
    date_added: datetime
    date_updated: Optional[datetime]
    products: List[dict]

class GenerateSeoResponse(BaseModel):
    cart_id: int
    name: str
    old_seo_keyword: Optional[str]
    new_seo_keyword: str