<?php

namespace xmvc\core;

use xmvc\MVC;
use xmvc\Login;

/**
 * MVC core 的权限处理类
 */
class Power extends Login
{
    public function __construct()
    {
        parent::__construct(SITE_USER_LOGIN_KEY, SITE_USER_INFO_KEY);
    }

    /**
     * 权限检测
     */
    public function verify(): bool
    {
        if ($this->skip()) {
            return true;
        }
        $this->digestVerify();
        return $this->isLogined();
    }

    /**
     * 不需要认证的 uri
     */
    public function skip(): bool
    {
        $skipList = ['js-global'];
        return in_array(MVC::$uri, $skipList);
    }

    /**
     * 取用户名的密码
     * @param string $username
     * @param string|false 返回已被 digestPass() 哈希过的密码过来, 返回 false 即用户不存在
     */
    public function getPassword(string $username): string|false
    {
        if (hash_equals($username, MVC::$cfg['site'][SITE]['user'])) {
            return MVC::$cfg['site'][SITE]['pass']; //已被 digestPass() 哈希过的密码
        }
        return false;
    }

    /**
     * 退出方法
     * - 注意: 区分类名与方法名的大小写
     * @return string 返回 控制器-方法名
     */
    public function logout(): string
    {
        return 'xmvc/core/cmd-logout';
    }

    /**
     * 登录成功事件 - 写日志 或者 其他处理
     * @param string $username 用户名
     */
    public function onSuccess(string $username)
    {
        ;
    }

    /**
     * 登录失败事件 - 写日志 或者 其他处理
     * @param string $username 用户名
     */
    public function onFail(string $username)
    {
        ;
    }
}
