<?php

declare(strict_types=1);

namespace App\Model;


use Hyperf\Database\Model\Builder;
use Hyperf\Snowflake\Concern\Snowflake;

/**
 * @property string $user_id 主键
 * @property string $user_name 用户名称
 * @property string $user_account 账号
 * @property string $mobile 手机号
 * @property int $sex 性别（0:未知 1:男 2:女）
 * @property string $avatar 头像
 * @property string $wx_mobile 微信手机号
 * @property string $user_password 密码
 * @property string $salt 密码混淆码
 * @property int $user_type 用户类型（1:患者 2:医师 3:药师）
 * @property int $user_status 状态（0:禁用 1:正常 2:删除）
 * @property int $register_method 注册方式（1:微信小程序 ）
 * @property string $login_ip 登陆ip
 * @property string $last_login_at 最后登陆时间
 * @property \Carbon\Carbon $created_at 创建时间
 * @property \Carbon\Carbon $updated_at 修改时间
 */
class User extends Model
{
    use Snowflake;

    /**
     * The table associated with the model.
     */
    protected ?string $table = 'user';

    /**
     * The attributes that are mass assignable.
     */
    protected array $fillable = ['user_id', 'user_name', 'user_account', 'mobile', 'sex', 'avatar', 'wx_mobile', 'user_password', 'salt', 'user_type', 'user_status', 'register_method', 'login_ip', 'last_login_at', 'created_at', 'updated_at'];

    /**
     * The attributes that should be cast to native types.
     */
    protected array $casts = ['user_id' => 'string', 'user_type' => 'integer', 'user_status' => 'integer', 'register_method' => 'integer', 'created_at' => 'datetime', 'updated_at' => 'datetime', 'sex' => 'integer'];

    protected string $primaryKey = "user_id";

    /**
     * 获取用户信息-单条
     * @param array $params
     * @param array $fields
     * @return object|null
     */
    public static function getOne(array $params, array $fields = ['*']): object|null
    {
        $result = self::where($params)->first($fields);
        unset($result->user_password);
        unset($result->salt);
        return $result;
    }

    /**
     * 新增用户-批量
     * @param array $data 新增数据
     * @return User|\Hyperf\Database\Model\Model
     */
    public static function addUser(array $data): User|\Hyperf\Database\Model\Model
    {
        return self::create($data);
    }

    /**
     * 修改用户-批量
     * @param array $params
     * @param array $data
     * @return int
     */
    public static function editUser(array $params = [], array $data = []) : int
    {
        return self::where($params)->update($data);
    }
}
