package com.sckw.system.model.vo.req;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

/**
 * App 端查询菜单或按钮权限入参
 * <p>
 * permQueryType：1-仅菜单（目录+菜单），2-仅按钮，3-菜单且每项下带出该菜单下的按钮权限
 */
@Data
public class AppMenuPermQueryReqVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 查询类型：1 仅菜单，2 仅按钮，3 菜单并带出下属按钮
     */
    public static final int PERM_QUERY_MENU = 1;
    public static final int PERM_QUERY_BUTTON = 2;
    public static final int PERM_QUERY_MENU_WITH_BUTTONS = 3;

    @NotBlank(message = "客户端类型不能为空")
    @Schema(description = "终端类型：3-企业APP 等，与菜单 client_type 一致")
    private String clientType;

    /**
     * 与 {@link FindMenuTreeReqVo#getUserId()} 一致：企业 APP 传参用户 id 时走对应权限链路
     */
    @Schema(description = "用户 id，APP 与 findMenuTree 一致时可传")
    private Long userId;

    @NotNull(message = "权限查询类型不能为空")
    @Min(1)
    @Max(3)
    @Schema(description = "1-仅菜单（目录+菜单），2-仅按钮，3-菜单且每项携带 buttons 按钮列表")
    private Integer permQueryType;
}
