# -*- coding: utf-8 -*-
"""
管理端 — 租户管理员 CRUD Pydantic Schema。

覆盖：管理员列表、创建、编辑、重置密码。

需求: 14.1, 14.2, 14.4, 14.5
"""

from __future__ import annotations

from datetime import datetime

from pydantic import Field

from app.schemas.base import CamelModel


# ── 管理员列表 ────────────────────────────────────────────


class TenantAdminListItem(CamelModel):
    """租户管理员列表项。"""
    id: int
    username: str
    display_name: str | None = None
    tenant_id: int  # 所属租户 ID（上游 BIGINT）
    tenant_name: str | None = None  # 所属租户名称（JOIN biz.tenants）
    admin_type: str = "tenant_admin"  # tenant_admin / site_admin
    managed_site_ids: list[int] = Field(default_factory=list)
    is_active: bool = True
    created_at: str | None = None
    last_login_at: str | None = None


# ── 创建管理员 ────────────────────────────────────────────


class TenantAdminCreateRequest(CamelModel):
    """创建租户管理员请求。"""
    username: str = Field(..., min_length=1, max_length=100, description="用户名")
    password: str = Field(..., min_length=1, description="初始密码")
    display_name: str | None = Field(None, max_length=100, description="显示名称")
    # tenant_id 从 biz.tenants 选择（GET /api/admin/tenants 获取可选列表）
    tenant_id: int = Field(..., description="所属租户 ID（来源: biz.tenants）")
    managed_site_ids: list[int] = Field(..., min_length=1, description="管辖门店 ID 列表")


# ── 编辑管理员 ────────────────────────────────────────────


class TenantAdminEditRequest(CamelModel):
    """编辑租户管理员请求（所有字段可选）。"""
    username: str | None = Field(None, min_length=1, max_length=100, description="用户名（需全局唯一）")
    display_name: str | None = Field(None, max_length=100, description="显示名称")
    managed_site_ids: list[int] | None = Field(None, description="管辖门店 ID 列表")
    is_active: bool | None = Field(None, description="账号状态")


# ── 重置密码 ──────────────────────────────────────────────


class ResetPasswordRequest(CamelModel):
    """重置密码请求。"""
    new_password: str = Field(..., min_length=1, description="新密码")
