from pydantic import BaseModel
from typing import Optional
from uuid import UUID
from datetime import datetime


class ModuleOut(BaseModel):
    module_id: UUID
    module_code: str
    module_name: str
    description: Optional[str] = None
    is_active: bool

    model_config = {"from_attributes": True}


class ModuleToggle(BaseModel):
    is_active: bool


class RoleOut(BaseModel):
    role_id: UUID
    role_code: str
    role_name: str
    description: Optional[str] = None
    is_system_role: bool
    is_active: bool

    model_config = {"from_attributes": True}


class RoleCreate(BaseModel):
    role_code: str
    role_name: str
    description: Optional[str] = None


class PermissionMatrixRow(BaseModel):
    role_code: str
    module_code: str
    can_view: bool
    can_create: bool
    can_edit: bool
    can_delete: bool
    can_approve: bool


class UserOut(BaseModel):
    user_id: UUID
    employee_code: str
    name: str
    mobile: Optional[str] = None
    email: Optional[str] = None
    role_code: Optional[str] = None
    is_active: bool
    last_login_at: Optional[datetime] = None

    model_config = {"from_attributes": True}


class UserCreate(BaseModel):
    employee_code: str
    name: str
    mobile: Optional[str] = None
    email: Optional[str] = None
    role_code: str
    password: str


class UserUpdate(BaseModel):
    name: Optional[str] = None
    mobile: Optional[str] = None
    email: Optional[str] = None
    role_code: Optional[str] = None
    is_active: Optional[bool] = None


class PasswordReset(BaseModel):
    new_password: str


class MyPermissionOut(BaseModel):
    module_code: str
    module_name: str
    can_view: bool
    can_create: bool
    can_edit: bool
    can_delete: bool
    can_approve: bool
