from dataclasses import dataclass
from pot_libs.sanic_api.column import Int, Str, List, Opt
from pot_libs.sanic_api import Model
from unify_api.utils.response_code import DbErr, UserErr, JwtErr


@dataclass()
class UserInfoResponse(Model, DbErr, UserErr, JwtErr):
    user_id: int = Int('用户id').eg(80)
    nick_name: str = Str('昵称').eg("微信昵称")
    head_image_url: str = Str('头像地址').eg("http://abcweixin")
    real_name: str = Str('姓名').eg("张三")
    unit: str = Str('单位').eg("汇云中心")
    product_list: list = List("产品信息: 1-知电U+, 2-安电U+, 3-安电U+管理版").eg([1, 2, 3])
    zhiweiu_auth: int = Int('用户权限:1-普通用户,2-运维用户').eg(1)
    lang: str = Str("语言").eg("Chinese")


@dataclass()
class SendSMSReq(Model):
    phone: str = Str('手机号').eg("13803838438")


@dataclass()
class SaveUserReq(Model):
    real_name: str = Str('姓名').eg("张三")
    unit: str = Str('公司').eg("清科优能")
    job: str = Str('职位').eg("程序猿")
    phone: str = Str('手机号').eg("13803838438")
    password: str = Str('密码').eg("13803838438")
    password2: str = Str('确认密码').eg("13803838438")
    verify: str = Opt(Str('当用手机号登录必传').eg("124567"))
    wechat_id: str = Opt(Str('当用微信登录必传').eg("041u75000YISfM1BDJ300KsbU"))


@dataclass()
class UpdatePhoneReq(Model):
    user_id: str = Str('用户id').eg("10086")
    phone: str = Str('手机号').eg("13803838438")
    verify: str = Str('验证码').eg("124567")


@dataclass()
class AuthPhoneReq(Model):
    phone: str = Str('手机号').eg("13803838438")
    verify: str = Str('验证码').eg("124567")


@dataclass()
class UserinfoReq(Model):
    user_id: str = Str('用户id').eg("10086")


@dataclass()
class UpdateWechatReq(Model):
    user_id: str = Str('用户id').eg("10086")
    code: str = Str('code').eg("")


@dataclass()
class UserinfoResp(Model):
    user_id: str = Str('用户id').eg("10086")
    name: str = Opt(Str('姓名').eg("张三"))
    phone: str = Str('手机号').eg("13803838438")
    unit: str = Str('公司').eg("10086")
    job: str = Str('职业').eg("10086")
    is_wechat: int = Int('是否绑定微信 1 绑定   0未绑定').eg(1)
    lang: str = Str("语言").eg("Chinese")


@dataclass()
class UpdateUserInfoReq(Model):
    user_id: str = Str('用户id').eg("10086")
    name: str = Opt(Str('姓名').eg("张三"))
    unit: str = Opt(Str('公司').eg("10086"))
    job: str = Opt(Str('职业').eg("10086"))
    lang: str = Opt(Str("语言").eg("Chinese"))


@dataclass()
class UpdatePasswordReq(Model):
    phone: str = Str('手机号').eg("13803838438")
    password: str = Str('密码').eg("13803838438")
    password2: str = Str('密码2').eg("13803838438")


@dataclass()
class PhoneIsHavingReq(Model):
    phone: str = Str('手机号').eg("13803838438")
