import uuid
from datetime import datetime
from sqlalchemy import String, Boolean, Integer, DateTime
from sqlalchemy.orm import Mapped, mapped_column
from app.models.database import Base


class Client(Base):
    __tablename__ = "clients"

    id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
    name: Mapped[str] = mapped_column(String(255), nullable=False)
    email: Mapped[str] = mapped_column(String(255), nullable=False)
    api_key_hash: Mapped[str] = mapped_column(String(255), nullable=False)
    rate_limit_per_min: Mapped[int] = mapped_column(Integer, default=100)
    scopes: Mapped[str] = mapped_column(String(255), default='["convert"]')
    active: Mapped[bool] = mapped_column(Boolean, default=True)
    created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
    deleted_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)

    # None = sin paquete asignado (sin límite de créditos, solo rige rate_limit_per_min)
    credits_remaining: Mapped[int | None] = mapped_column(Integer, nullable=True)
    credits_expire_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)
