from pydantic import BaseModel, validator
from typing import Optional
from datetime import datetime
import re

# 用户注册
class UserRegister(BaseModel):
    phone: str  # 手机号必填，作为唯一标识
    password: str
    nickname: Optional[str] = None
    
    @validator('phone')
    def validate_phone(cls, v):
        """验证手机号格式（11位数字）"""
        if not v:
            raise ValueError('手机号不能为空')
        if not re.match(r'^1[3-9]\d{9}$', v):
            raise ValueError('手机号格式错误，请输入11位有效手机号')
        return v
    
    @validator('password')
    def validate_password(cls, v):
        """验证密码"""
        if not v:
            raise ValueError('密码不能为空')
        if len(v) < 6:
            raise ValueError('密码长度不能少于6位')
        if len(v) > 72:
            raise ValueError('密码长度不能超过72位')
        return v

# 用户登录
class UserLogin(BaseModel):
    phone: str  # 手机号登录
    password: str
    
    @validator('phone')
    def validate_phone(cls, v):
        """验证手机号格式（11位数字）"""
        if not v:
            raise ValueError('手机号不能为空')
        if not re.match(r'^1[3-9]\d{9}$', v):
            raise ValueError('手机号格式错误，请输入11位有效手机号')
        return v

# 用户响应
class UserResponse(BaseModel):
    id: int
    phone: str
    nickname: Optional[str]
    avatar: Optional[str]
    balance: float
    created_at: datetime
    
    class Config:
        from_attributes = True

# Token 响应
class Token(BaseModel):
    access_token: str
    token_type: str = "bearer"
    user: UserResponse
