package org.xyzh.api.system.service;

import org.xyzh.api.system.vo.AclVO;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageRequest;
import org.xyzh.common.dto.sys.TbSysAclDTO;
import org.xyzh.common.dto.sys.TbSysAclPolicyDTO;

/**
 * @description    访问控制列表服务接口
 * @filename    AclService.java
 * @author    yslg
 * @copyright yslg
 * @since 2025-12-05
 */
public interface AclService {
    
    // ================= ACL 管理 =================
    /**
     * @description    插入访问控制列表
     * @param    aclDTO    访问控制列表DTO
     * @return    ResultDomain<TbSysAclDTO>    插入结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<TbSysAclDTO> insertAcl(TbSysAclDTO aclDTO);

    /**
     * @description    更新访问控制列表
     * @param    aclDTO    访问控制列表DTO
     * @return    ResultDomain<TbSysAclDTO>    更新结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<TbSysAclDTO> updateAcl(TbSysAclDTO aclDTO);

    /**
     * @description    删除访问控制列表
     * @param    aclDTO    访问控制列表DTO
     * @return    ResultDomain<Boolean>    删除结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<Boolean> deleteAcl(TbSysAclDTO aclDTO);

    /**
     * @description    根据条件查询访问控制列表分页数据
     * @param    pageRequest    分页请求
     * @return    ResultDomain<AclVO>    分页结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<AclVO> getAclPage(PageRequest<AclVO> pageRequest);

    /**
     * @description    根据条件查询访问控制列表
     * @param    filter    过滤条件
     * @return    ResultDomain<AclVO>    查询结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<AclVO> getAclList(AclVO filter);

    /**
     * @description    根据对象ID查询访问控制列表
     * @param    objectId    对象ID
     * @return    ResultDomain<AclVO>    查询结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<AclVO> getAclByObjectId(String objectId);

    // ================= ACL Policy 管理 =================
    /**
     * @description    插入访问控制策略
     * @param    aclPolicyDTO    访问控制策略DTO
     * @return    ResultDomain<TbSysAclPolicyDTO>    插入结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<TbSysAclPolicyDTO> insertAclPolicy(TbSysAclPolicyDTO aclPolicyDTO);

    /**
     * @description    更新访问控制策略
     * @param    aclPolicyDTO    访问控制策略DTO
     * @return    ResultDomain<TbSysAclPolicyDTO>    更新结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<TbSysAclPolicyDTO> updateAclPolicy(TbSysAclPolicyDTO aclPolicyDTO);

    /**
     * @description    删除访问控制策略
     * @param    aclPolicyDTO    访问控制策略DTO
     * @return    ResultDomain<Boolean>    删除结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<Boolean> deleteAclPolicy(TbSysAclPolicyDTO aclPolicyDTO);

    /**
     * @description    根据条件查询访问控制策略分页数据
     * @param    pageRequest    分页请求
     * @return    ResultDomain<AclVO>    分页结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<AclVO> getAclPolicyPage(PageRequest<AclVO> pageRequest);

    /**
     * @description    根据条件查询访问控制策略列表
     * @param    filter    过滤条件
     * @return    ResultDomain<AclVO>    查询结果
     * @author    yslg
     * @since 2025-12-05
     */
    ResultDomain<AclVO> getAclPolicyList(AclVO filter);
}
