package org.example.ModuleApi.ModuleAjaxApi.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface CRMapper {
    List<Map<String, Object>> getModuleIdFieldRow(@Param("keyName") String keyName, @Param("tab") String key, @Param("labTreeType") int labTreeType);


    int getAuditStepCount(@Param("moduleId") String moduleId, @Param("isBase") boolean isBase);



    /**
     * 查询表格列配置数据
     */
    List<Map<String, Object>> GetColumnRows(
            @Param("windowsDirver") boolean windowsDirver,
            @Param("userId") String userId,
            @Param("baseMainGridViewPrefix") String baseMainGridViewPrefix,
            @Param("userName") String userName,
            @Param("moduleId") String moduleId,
            @Param("id") int id
    );

    /**
     * 从数据库获取条件数据
     */
    List<Map<String, Object>> GetCondition(
            @Param("fromkey") String fromkey,
            @Param("id") Integer id,
            @Param("windowsDirver") boolean windowsDirver);



    /**
     * 获取账单详情列数据
     */
    List<Map<String, Object>> GetBillDetailColumns(
            @Param("moduleCode") String moduleCode,
            @Param("userId") String userId,
            @Param("username") String username,
            @Param("id") int id,
            @Param("windowsDirver") boolean windowsDirver);



    /**
     * 获取账单的主表数据
     */
    List<Map<String, Object>> GetBillMasterRows(
            @Param("moduleId") String moduleId,
            @Param("userName") String userName,
            @Param("id") int id,
            @Param("windowsDirver") boolean windowsDirver);



    /**
     * 获取账单模块信息
     *
     * @param moduleCode 模块代码
     * @param menuId     菜单 ID
     * @return 账单模块信息
     */
    Map<String, Object> GetBillModule(@Param("moduleCode") String moduleCode, @Param("menuId") String menuId);


    /**
     * 获取控件行数据
     *
     * @param fromkey  表单键
     * @param userName 用户名
     * @param moduleId 模块ID
     * @param fieldId  字段ID
     * @return 控件行数据列表
     */
    List<Map<String, Object>> GetControlRows(@Param("fromkey") Object fromkey, @Param("userName") String userName, @Param("moduleId") String moduleId, @Param("fieldId") Integer fieldId);



    /**
     * 根据菜单 ID 查询系统弹出菜单信息
     *
     * @param menuid   菜单 ID
     * @param fromkey  表单键
     * @param username 用户名
     * @return 菜单信息列表
     */
    List<Map<String, Object>> selectSystemPopupMenuById(@Param("menuid") int menuid, @Param("fromkey") String fromkey, @Param("username") String username);


    /**
     * 根据菜单类型查询系统弹出菜单信息
     *
     * @param menutype      菜单类型
     * @param fromkey       表单键
     * @param username      用户名
     * @param windowsDirver 是否为 Windows 驱动
     * @return 菜单信息列表
     */
    List<Map<String, Object>> selectSystemPopupMenuByType(@Param("menutype") int menutype,
                                                          @Param("fromkey") String fromkey,
                                                          @Param("username") String username,
                                                          @Param("windowsDirver") boolean windowsDirver);


    /**
     * 查询单据来源信息
     *
     * @param typeCode  模块代码（对应原C#的@typeCode参数）
     * @param condition 动态拼接的查询条件
     * @return 单据来源信息列表
     */
    List<Map<String, Object>> getBillSource(
            @Param("typeCode") String typeCode,
            @Param("condition") String condition
    );


    /**
     * 获取单据来源列信息
     *
     * @param sourceId           来源ID
     * @param userId             用户ID
     * @param billSourceGridView 单据来源表格前缀（来自枚举）
     * @return 列信息列表
     */
    List<Map<String, Object>> getBillSourceColumns(
            @Param("sourceId") String sourceId,
            @Param("userId") String userId,
            @Param("billSourceGridView") String billSourceGridView
    );



    /**
     * 获取单据来源明细列信息
     *
     * @param sourceId                 来源ID
     * @param billSourceDetailGridView 单据来源明细表格前缀（来自枚举）
     * @param userId                   用户ID
     * @return 明细列信息列表
     */
    List<Map<String, Object>> getBillSourceDetailColumns(
            @Param("sourceId") String sourceId,
            @Param("billSourceDetailGridView") String billSourceDetailGridView,
            @Param("userId") String userId
    );




    /**
     * 客户分类设置
     * 根据模块代码和菜单ID获取基础模块配置信息
     *
     * @param moduleCode 模块代码
     * @param menuId     菜单ID
     * @return 模块配置信息
     */

    List<Map<String, Object>> GetBaseModule(@Param("moduleCode") String moduleCode, @Param("menuId") String menuId);

   }

