package org.xyzh.api.system.service;

import org.xyzh.api.system.vo.PermissionVO;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.sys.TbSysViewDTO;
import org.xyzh.common.dto.sys.TbSysViewPermissionDTO;
import org.xyzh.common.core.page.PageRequest;
/**
 * @description    视图服务接口
 * @filename    ViewService.java
 * @author    yslg
 * @copyright yslg
 * @since 2025-11-05
 */
public interface ViewService {
    
    // ================= 视图管理 =================
    /**
     * @description    插入视图
     * @param    viewDTO    视图DTO
     * @return    ResultDomain<TbSysViewDTO>    插入结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysViewDTO> insertView(TbSysViewDTO viewDTO);

    /**
     * @description    更新视图
     * @param    viewDTO    视图DTO
     * @return    ResultDomain<TbSysViewDTO>    更新结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysViewDTO> updateView(TbSysViewDTO viewDTO);

    /**
     * @description    根据ID删除视图
     * @param    viewDTO    视图DTO
     * @return    ResultDomain<Boolean>    删除结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<Boolean> deleteView(TbSysViewDTO viewDTO);

    /**
     * @description    根据ID查询视图
     * @param    filter    视图VO
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getView(PermissionVO filter);

    /**
     * @description    根据条件查询视图列表
     * @param    filter    视图VO
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getViewList(PermissionVO filter);

    /**
     * @description    根据条件查询视图分页列表
     * @param    filter    视图VO
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getViewPage(PageRequest<PermissionVO> filter);

    /**
     * @description    获取视图树（包含子视图）
     * @param    filter    视图VO
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getViewTree(PermissionVO filter);

    // ================= 视图权限关联管理 =================
    /**
     * @description    设置视图权限
     * @param    permissionVO    视图ID 和权限ID数组
     * @return    ResultDomain<PermissionVO>    设置结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> setViewPermissions(PermissionVO permissionVO);

    /**
     * @description    获取视图的权限列表
     * @param    permissionVO    视图
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getViewPermissionList(PermissionVO permissionVO);
}
