from pydantic import BaseModel, EmailStr, field_validator, ConfigDict
from typing import Optional
from datetime import date

# Alap adatok, amik mindenhol kellenek
class UserBase(BaseModel):
    email: EmailStr
    first_name: Optional[str] = None
    last_name: Optional[str] = None
    is_active: Optional[bool] = True
    is_superuser: bool = False
    region_code: str = "HU"

# --- REGISZTRÁCIÓ ---
class UserRegister(UserBase):
    password: str
    birthday: Optional[date] = None
    is_company: bool = False
    company_name: Optional[str] = None
    tax_number: Optional[str] = None

    @field_validator('email')
    @classmethod
    def block_temporary_emails(cls, v: str) -> str:
        blacklist = ['mailinator.com', '10minutemail.com', 'temp-mail.org', 'guerrillamail.com']
        domain = v.split('@')[-1].lower()
        if domain in blacklist:
            raise ValueError('Ideiglenes email szolgáltató nem engedélyezett!')
        return v

    @field_validator('tax_number')
    @classmethod
    def validate_tax_id(cls, v: Optional[str], info) -> Optional[str]:
        if info.data.get('is_company') and (not v or len(v) < 8):
            raise ValueError('Cég esetén az adószám első 8 karaktere kötelező!')
        return v

# --- VÁLASZ (Ezt hiányolta a rendszer!) ---
class UserResponse(UserBase):
    id: int
    is_company: bool
    company_name: Optional[str] = None
    
    # Pydantic V2 konfiguráció az ORM (SQLAlchemy) támogatáshoz
    model_config = ConfigDict(from_attributes=True)

# Frissítéshez használt séma
class UserUpdate(BaseModel):
    password: Optional[str] = None
    first_name: Optional[str] = None
    last_name: Optional[str] = None
    email: Optional[EmailStr] = None