import uuid
from datetime import datetime

from pydantic import BaseModel, EmailStr

from app.models.org import UserRole


class UserOut(BaseModel):
    id: uuid.UUID
    email: str
    full_name: str
    role: UserRole
    is_active: bool
    created_at: datetime

    class Config:
        from_attributes = True


class CreateUserRequest(BaseModel):
    email: EmailStr
    full_name: str
    role: UserRole = UserRole.editor


class CreateUserResponse(BaseModel):
    user: UserOut
    temporary_password: str


class UpdateUserRequest(BaseModel):
    role: UserRole | None = None
    is_active: bool | None = None


class AuditLogOut(BaseModel):
    id: uuid.UUID
    user_id: uuid.UUID | None
    action: str
    resource_type: str
    resource_id: str | None
    log_metadata: dict
    created_at: datetime

    class Config:
        from_attributes = True


class APIKeyOut(BaseModel):
    id: uuid.UUID
    name: str
    key_prefix: str
    created_at: datetime
    last_used_at: datetime | None
    revoked_at: datetime | None

    class Config:
        from_attributes = True


class CreateAPIKeyRequest(BaseModel):
    name: str


class CreateAPIKeyResponse(BaseModel):
    api_key: APIKeyOut
    full_key: str
