from typing import List, Optional

from lin import BaseModel, ParameterError
from pydantic import EmailStr, Field, validator


class EmailSchema(BaseModel):
    email: Optional[str] = Field(description="用户邮箱")

    @validator("email")
    def check_email(cls, v, values, **kwargs):
        return EmailStr.validate(v) if v else ""


class ResetPasswordSchema(BaseModel):
    new_password: str = Field(description="新密码", min_length=6, max_length=22)
    confirm_password: str = Field(description="确认密码", min_length=6, max_length=22)

    @validator("confirm_password")
    def passwords_match(cls, v, values, **kwargs):
        if v != values["new_password"]:
            raise ParameterError("两次输入的密码不一致,请输入相同的密码")
        return v


class GroupIdListSchema(BaseModel):
    group_ids: List[int] = Field(description="用户组ID列表")

    @validator("group_ids", each_item=True)
    def check_group_id(cls, v, values, **kwargs):
        if v <= 0:
            raise ParameterError("用户组ID必须大于0")
        return v