from pydantic import BaseModel, EmailStr, Field
from typing import Optional
from datetime import datetime


class UserBase(BaseModel):
    email: EmailStr
    name: str
    
    
class LoginRequestModel(BaseModel):
    username: EmailStr
    password: str


class UserCreate(UserBase):
    password: str


class UserRead(UserBase):
    id: Optional[int] = None
    created_at: datetime
    updated_at: datetime
    password: Optional[str]
    default_company: Optional[int] = None
    is_email_verified: Optional[int] = None
    step: Optional[int] = None
    email_verified_at: Optional[datetime] = None
    deleted_at: Optional[datetime] = None
    status: Optional[int] = Field(
        default=1, description="1: active, 2: inactive, 3: deleted"
    )

    class Config:
        from_attributes = True


class UserUpdate(BaseModel):
    email: Optional[EmailStr] = None
    name: Optional[str] = None
    password: Optional[str] = None
    status: Optional[int] = Field(
        None, description="1: active, 2: inactive, 3: deleted"
    )
    deleted_at: Optional[datetime] = None


class Token(BaseModel):
    access_token: str
    token_type: str


class RecoverPasswordRequest(BaseModel):
    email: EmailStr


class VerifyOTPRequest(BaseModel):
    email: EmailStr
    otp: str


class UpdatePasswordRequest(BaseModel):
    email: EmailStr
    otp: str
    new_password: str


class OTPLogSchema(BaseModel):
    id: Optional[int] = None
    email: EmailStr
    otp: str
    type: int
    created_at: datetime
    used_at: Optional[datetime] = None
    expired_at: Optional[datetime] = None

    class Config:
        from_attributes = True
