package org.xyzh.system.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.xyzh.api.system.service.ModulePermissionService;
import org.xyzh.api.system.vo.PermissionVO;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageRequest;
import org.xyzh.common.dto.sys.TbSysModuleDTO;
import org.xyzh.common.dto.sys.TbSysPermissionDTO;


@RestController
@RequestMapping("/system/permission")
public class PermissionController {

    private static final Logger logger = LoggerFactory.getLogger(PermissionController.class);

    @Autowired
    private ModulePermissionService modulePermissionService;

    // ================= 模块相关接口 =================
    /**
     * @description    创建模块
     * @param    moduleDTO    模块DTO
     * @return    创建结果
     * @author    yslg
     * @since 2025-11-10
     */
    @PostMapping("/module")
    @PreAuthorize("hasAuthority('system:permission:manage')")
    public ResultDomain<TbSysModuleDTO> createModule(@RequestBody TbSysModuleDTO moduleDTO) {
        return modulePermissionService.insertModule(moduleDTO);
    }

    /**
     * @description    更新模块
     * @param    moduleDTO    模块DTO
     * @return    更新结果
     * @author    yslg
     * @since 2025-11-10
     */
    @PutMapping("/moudule")
    @PreAuthorize("hasAuthority('system:permission:manage')")
    public ResultDomain<TbSysModuleDTO> updateModule(@RequestBody TbSysModuleDTO moduleDTO) {
        return modulePermissionService.updateModule(moduleDTO);
    }

    /**
     * @description    删除模块
     * @param    moduleDTO    模块DTO
     * @return    删除结果
     * @author    yslg
     * @since 2025-11-10
     */
    @DeleteMapping("/module")
    @PreAuthorize("hasAuthority('system:permission:manage')")
    public ResultDomain<Boolean> deleteModule(@RequestBody TbSysModuleDTO moduleDTO) {
        return modulePermissionService.deleteModule(moduleDTO);
    }

    /**
     * @description    获取模块分页数据
     * @param    PageRequest<TbSysModuleDTO>    pageRequest    分页请求参数
     * @return    返回值描述
     * @author    yslg
     * @since 2025-11-10
     */
    @PostMapping("/module/page")
    @PreAuthorize("hasAuthority('system:permission:view')")
    public ResultDomain<PermissionVO> getModulePage(@RequestBody PageRequest<PermissionVO> pageRequest) {
        return modulePermissionService.getModulePage(pageRequest);
    }

    /**
     * @description    获取模块列表
     * @param    filter    模块DTO
     * @return    返回值描述
     * @author    yslg
     * @since 2025-11-10
     */
    @PostMapping("/module/list")
    @PreAuthorize("hasAuthority('system:permission:view')")
    public ResultDomain<PermissionVO> getModuleList(@RequestBody PermissionVO filter) {
        return modulePermissionService.getModuleList(filter);
    }

    // ================= 权限相关接口 =================
    /**
     * @description    创建权限
     * @param    permissionDTO    权限DTO
     * @return    ResultDomain<TbSysPermissionDTO>    创建结果
     * @author    yslg
     * @since 2025-11-10
     */
    @PostMapping
    @PreAuthorize("hasAuthority('system:permission:manage')")
    public ResultDomain<TbSysPermissionDTO> createPermission(@RequestBody TbSysPermissionDTO permissionDTO) {
        return modulePermissionService.insertPermission(permissionDTO);
    }

    /**
     * @description    更新权限
     * @param    permissionDTO    权限DTO
     * @return    更新结果
     * @author    yslg
     * @since 2025-11-10
     */
    @PutMapping
    @PreAuthorize("hasAuthority('system:permission:manage')")
    public ResultDomain<TbSysPermissionDTO> updatePermission(@RequestBody TbSysPermissionDTO permissionDTO) {
        return modulePermissionService.updatePermission(permissionDTO);
    }

    /**
     * @description    删除权限
     * @param    permissionDTO    权限DTO
     * @return    删除结果
     * @author    yslg
     * @since 2025-11-10
     */
    @DeleteMapping
    @PreAuthorize("hasAuthority('system:permission:manage')")
    public ResultDomain<Boolean> deletePermission(@RequestBody TbSysPermissionDTO permissionDTO) {
        return modulePermissionService.deletePermission(permissionDTO);
    }

    /**
     * @description    获取权限分页数据
     * @param    PageRequest<TbSysPermissionDTO>    pageRequest    分页请求参数
     * @return    分页数据
     * @author    yslg
     * @since 2025-11-10
     */
    @PostMapping("/page")
    @PreAuthorize("hasAuthority('system:permission:view')")
    public ResultDomain<PermissionVO> getModulePermissionPage(@RequestBody PageRequest<PermissionVO> pageRequest) {
        return modulePermissionService.getModulePermissionPage(pageRequest);
    }

    /**
     * @description    获取权限列表
     * @param    filter    权限VO
     * @return    列表数据
     * @author    yslg
     * @since 2025-11-10
     */
    @PostMapping("/list")
    @PreAuthorize("hasAuthority('system:permission:view')")
    public ResultDomain<PermissionVO> getModulePermissionList(@RequestBody PermissionVO filter) {
        return modulePermissionService.getModulePermissionList(filter);
    }
    
    
}
