package com.ruoyi.web.report.service;

import com.ruoyi.web.report.domain.ErpReportDefinition;

import java.util.List;

/**
 * 报表定义服务接口。
 *
 * <p>统一承载报表定义的业务规则，包括编码唯一性、默认状态、发布动作等。</p>
 */
public interface IErpReportDefinitionService {
    /**
     * 按ID查询详情。
     *
     * @param id 报表ID
     * @return 报表定义
     */
    ErpReportDefinition selectById(Long id);

    /**
     * 条件查询列表。
     *
     * @param query 查询条件
     * @return 报表列表
     */
    List<ErpReportDefinition> selectList(ErpReportDefinition query);

    /**
     * 校验报表编码是否唯一。
     *
     * @param entity 待校验实体
     * @return true唯一，false不唯一
     */
    boolean checkReportCodeUnique(ErpReportDefinition entity);

    /**
     * 新增报表定义。
     *
     * @param entity 报表定义
     * @return 受影响行数
     */
    int insert(ErpReportDefinition entity);

    /**
     * 修改报表定义。
     *
     * @param entity 报表定义
     * @return 受影响行数
     */
    int update(ErpReportDefinition entity);

    /**
     * 删除报表定义。
     *
     * @param id 报表ID
     * @return 受影响行数
     */
    int removeById(Long id);

    /**
     * 发布报表定义。
     *
     * @param id 报表ID
     * @param updateBy 操作人
     * @return 受影响行数
     */
    int publishById(Long id, String updateBy);

    /**
     * 对已发布报表执行菜单重建/补建。
     *
     * @param operator 操作人
     * @return 成功处理数量
     */
    int rebuildMenusForPublished(String operator);

    /**
     * 按报表ID重建菜单（不变更版本号与状态）。
     *
     * @param reportId 报表ID
     * @param operator 操作人
     * @return 处理数量（0/1）
     */
    int rebuildMenuByReportId(Long reportId, String operator);
}
