package com.czg.handler;

import cn.dev33.satoken.annotation.handler.SaAnnotationHandlerInterface;
import cn.hutool.core.util.StrUtil;
import com.czg.annotation.SaAdminCheckRole;
import com.czg.annotation.SaStaffCheckPermission;
import com.czg.sa.StpKit;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

/**
 * 员工权限校验
 * @author Administrator
 */
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.annotation.SaMode;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaCheckLogin;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Method;

@Component
@Slf4j
public class SaAdminCheckRoleHandler implements SaAnnotationHandlerInterface<SaAdminCheckRole> {

    @Override
    public Class<SaAdminCheckRole> getHandlerAnnotationClass() {
        return SaAdminCheckRole.class;
    }

    @Override
    public void checkMethod(SaAdminCheckRole annotation, Method method) {

        if (StpKit.USER.isAdmin()) {
            log.debug("[SaAdminCheckRoleHandler] 管理员免校验: userId={}", StpKit.USER.getLoginId());
            return;
        }

        // 3️⃣ 非管理员，执行原本注解校验逻辑
        String[] roles = annotation.value();
        SaMode mode = annotation.mode();

        if (roles != null && roles.length > 0) {
            if (mode == SaMode.AND) {
                StpKit.USER.checkRoleAnd(roles);
            } else {
                // 有一个角色即可
                StpKit.USER.checkRoleOr(roles);
            }
        } else {
            // 如果注解没有指定角色，默认使用注解上 type 的值
            // 你 @SaCheckRole(type = "admin") 默认角色
            String typeRole = "admin";
            StpKit.USER.checkRole(typeRole);
        }

    }
}
