package org.example.Service;


import org.example.Entity.BaseResponse.BaseResponse;
import org.example.Entity.Control.Com.SysPoPupMenuBtn;
import org.example.Entity.EventArgs;
import org.example.Entity.System.BillStateEn;
import org.example.Entity.System.ModuleBaseEntity;
import org.example.Enums.SystemEnums;
import org.example.Utils.FileUtil;

import java.util.EventListener;

/**
 * 功能描述：IPubModuleOperations
 */
public interface IModuleEvent extends EventListener {

    /**
     * 模块数据加载前事件
     *
     * @param module 模块基础信息
     */
    void beforeModuleDataLoad(ModuleBaseEntity module);

    /**
     * 模块数据变更前事件
     *
     * @param module   模块基础信息
     * @param aType    操作类型：1新增，2修改，3删除，4作废，5作废恢复
     * @param response 基础响应对象
     */
    void beforeModuleDataChange(ModuleBaseEntity module, SystemEnums.ActionType aType, BaseResponse response);

    /**
     * 模块数据变更后事件
     *
     * @param module   模块基础信息
     * @param aType    操作类型：1新增，2修改，3删除，4作废，5作废恢复
     * @param response 基础响应对象
     */
    void afterModuleDataChange(ModuleBaseEntity module, SystemEnums.ActionType aType, BaseResponse response);

    /**
     * 模块数据删除前事件
     *
     * @param module   模块基础信息
     * @param aType    操作类型
     * @param response 基础响应对象
     */
    void beforeModuleDataDelete(ModuleBaseEntity module, SystemEnums.ActionType aType, BaseResponse response);

    /**
     * 模块数据删除后事件
     *
     * @param module   模块基础信息
     * @param aType    操作类型
     * @param response 基础响应对象
     */
    void afterModuleDataDelete(ModuleBaseEntity module, SystemEnums.ActionType aType, BaseResponse response);

    /**
     * 模块状态变更前事件
     *
     * @param module   模块基础信息
     * @param aType    操作类型：1提交 2撤回
     * @param response 基础响应对象
     */
    void beforeModuleStateChange(ModuleBaseEntity module, SystemEnums.ActionType aType, BaseResponse response);

    /**
     * 模块状态变更后事件
     *
     * @param module   模块基础信息
     * @param aType    操作类型：1提交 2撤回
     * @param response 基础响应对象
     */
    void afterModuleStateChange(ModuleBaseEntity module, SystemEnums.ActionType aType, BaseResponse response);

    /**
     * 模块审核状态变更前事件
     *
     * @param module   模块基础信息
     * @param stateEn  账单状态枚举
     * @param response 基础响应对象
     */
    void beforeModuleAuditStateChange(ModuleBaseEntity module, BillStateEn stateEn, BaseResponse response);

    /**
     * 模块审核状态变更后事件
     *
     * @param module   模块基础信息
     * @param stateEn  账单状态枚举
     * @param response 基础响应对象
     */
    void afterModuleAuditStateChange(ModuleBaseEntity module, BillStateEn stateEn, BaseResponse response);

    /**
     * 模块上下文菜单前事件
     *
     * @param btn      系统弹出菜单按钮
     * @param response 基础响应对象
     */
    void beforeModuleContextMenu(SysPoPupMenuBtn btn, BaseResponse response);

    /**
     * 模块上下文菜单后事件
     *
     * @param btn      系统弹出菜单按钮
     * @param response 基础响应对象
     */
    void afterModuleContextMenu(SysPoPupMenuBtn btn, BaseResponse response);

    /**
     * 文件上传前事件
     *
     * @param info     文件路径信息
     * @param response 基础响应对象
     */
    void beforeUploadFile(FileUtil.PathInfo info, BaseResponse response);

    /**
     * 文件上传后事件
     *
     * @param info     文件路径信息
     * @param response 基础响应对象
     */
    void afterUploadFile(FileUtil.PathInfo info, BaseResponse response);

    /**
     * 应用程序启动事件
     *
     * @param sender 事件源
     * @param e      事件参数
     */
    void appStart(Object sender, EventArgs e);

    /**
     * 应用程序结束事件
     *
     * @param sender 事件源
     * @param e      事件参数
     */
    void appEnd(Object sender, EventArgs e);
}