<?php

declare(strict_types=1);

namespace app\admin\model;

use app\common\model\traits\TimestampInteger;
use support\think\Model;
use support\think\Db;

/**
 * Admin 模型（Webman 迁移版）
 * @property int    $id              管理员ID
 * @property string $username        管理员用户名
 * @property string $nickname        管理员昵称
 * @property string $email           管理员邮箱
 * @property string $mobile          管理员手机号
 * @property string $last_login_ip   上次登录IP
 * @property string $last_login_time 上次登录时间
 * @property int    $login_failure   登录失败次数
 * @property string $password        密码密文
 * @property string $salt            密码盐
 * @property string $status          状态:enable=启用,disable=禁用
 */
class Admin extends Model
{
    use TimestampInteger;

    protected string $table = 'admin';
    protected string $pk = 'id';
    protected bool $autoWriteTimestamp = true;

    protected array $append = [
        'group_arr',
        'group_name_arr',
    ];

    public function getGroupArrAttr($value, $row): array
    {
        return Db::name('admin_group_access')
            ->where('uid', $row['id'])
            ->column('group_id');
    }

    public function getGroupNameArrAttr($value, $row): array
    {
        $groupAccess = Db::name('admin_group_access')
            ->where('uid', $row['id'])
            ->column('group_id');
        return AdminGroup::whereIn('id', $groupAccess)->column('name');
    }

    public function getAvatarAttr($value): string
    {
        return full_url($value ?? '', false, config('buildadmin.default_avatar'));
    }

    public function setAvatarAttr($value): string
    {
        return $value === full_url('', false, config('buildadmin.default_avatar')) ? '' : $value;
    }

    public function resetPassword(int|string $uid, string $newPassword): int
    {
        return $this->where(['id' => $uid])->update(['password' => hash_password($newPassword), 'salt' => '']);
    }
}
