package ink.wgink.module.form.service.design;

import ink.wgink.module.form.pojo.dtos.design.FormDTO;
import ink.wgink.module.form.pojo.pos.design.FormPO;
import ink.wgink.module.form.pojo.vos.design.FormVO;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.SuccessResultList;

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

public interface IFormService {

    /**
     * 创建动态表单
     *
     * @param createTableSQL
     */
    void createDynamicForm(String createTableSQL);

    /**
     * 删除表
     *
     * @param tableName
     * @param checkExist 判断是否存在
     */
    void deleteTable(String tableName, boolean checkExist);

    void deleteDynamicForm(String deleteTableSQL);

    void updateTableField(String tableName, String oldField, String newField, String newFieldType);

    void updateDynamicFormField(String alterFieldSQL);

    void deleteTableField(String tableName, String field);

    void deleteDynamicFormField(String alterFieldSQL);

    Integer countDynamicTable(String tableName);

    /**
     * 新增
     *
     * @param formVO
     * @return
     */
    void save(FormVO formVO);

    /**
     * 新增
     *
     * @param formVO
     * @return 新增ID
     */
    String saveReturnId(FormVO formVO);

    /**
     * 删除
     *
     * @param ids 表单ID列表
     */
    void delete(List<String> ids);


    /**
     * 删除
     *
     * @param ids 表达ID列表
     */
    void remove(List<String> ids);

    /**
     * 修改
     *
     * @param formId 表单ID
     * @param formVO
     * @return
     */
    void update(String formId, FormVO formVO);

    /**
     * 修改表单状态
     *
     * @param formId
     * @param formStatus
     */
    void updateStatus(String formId, String formStatus);

    /**
     * 修改新增页面代码
     *
     * @param formId
     * @param savePageCode
     */
    void updateSavePageCode(String formId, String savePageCode);

    /**
     * 修改修改页面代码
     *
     * @param formId
     * @param updatePageCode
     */
    void updateUpdatePageCode(String formId, String updatePageCode);

    /**
     * 修改查看页面代码
     *
     * @param formId
     * @param showPageCode
     */
    void updateShowPageCode(String formId, String showPageCode);

    /**
     * 修改打印页面代码
     *
     * @param formId
     * @param printPageCode
     */
    void updatePrintPageCode(String formId, String printPageCode);

    /**
     * 修改App新增页面代码
     *
     * @param formId
     * @param appSavePageCode
     */
    void updateAppSavePageCode(String formId, String appSavePageCode);

    /**
     * 修改App修改页面代码
     *
     * @param formId
     * @param appUpdatePageCode
     */
    void updateAppUpdatePageCode(String formId, String appUpdatePageCode);

    /**
     * 修改App详情页面代码
     *
     * @param formId
     * @param appShowPageCode
     */
    void updateAppShowPageCode(String formId, String appShowPageCode);

    /**
     * 保存到菜单
     *
     * @param formId
     * @param menuParentId
     */
    void updateToMenu(String formId, String menuParentId);

    /**
     * 详情
     *
     * @param params
     * @return
     */
    FormDTO get(Map<String, Object> params);

    /**
     * 详情
     *
     * @param formId 表单ID
     * @return
     */
    FormDTO get(String formId);

    /**
     * 详情
     *
     * @param params
     * @return
     */
    FormPO getPO(Map<String, Object> params);

    /**
     * 详情
     *
     * @param formId 表单ID
     * @return
     */
    FormPO getPO(String formId);

    /**
     * 详情
     *
     * @param formCode 表单编码
     * @return
     */
    FormPO getPOByCode(String formCode);

    /**
     * 详情
     *
     * @param formCode    表单编码
     * @param formVersion 表单版本
     * @return
     */
    FormPO getPOByCodeAndVersion(String formCode, Integer formVersion);

    /**
     * 新增页面代码
     *
     * @param formCode
     * @param formVersion
     * @return
     */
    String getSavePageCodeByCodeAndVersion(String formCode, Integer formVersion);

    /**
     * 修改页面代码
     *
     * @param formCode
     * @param formVersion
     * @return
     */
    String getUpdatePageCodeByCodeAndVersion(String formCode, Integer formVersion);

    /**
     * 详情页面代码
     *
     * @param formCode
     * @param formVersion
     * @return
     */
    String getShowPageCodeByCodeAndVersion(String formCode, Integer formVersion);

    /**
     * 打印页面代码
     *
     * @param formCode
     * @param formVersion
     * @return
     */
    String getPrintPageCodeByCodeAndVersion(String formCode, Integer formVersion);

    /**
     * APP新增页面代码
     *
     * @param formCode
     * @param formVersion
     * @return
     */
    String getAppSavePageCodeByCodeAndVersion(String formCode, Integer formVersion);

    /**
     * APP修改页面代码
     *
     * @param formCode
     * @param formVersion
     * @return
     */
    String getAppUpdatePageCodeByCodeAndVersion(String formCode, Integer formVersion);

    /**
     * APP详情页面代码
     *
     * @param formCode
     * @param formVersion
     * @return
     */
    String getAppShowPageCodeByCodeAndVersion(String formCode, Integer formVersion);

    /**
     * 查看data
     *
     * @param formId
     * @return
     */
    FormDTO getFormSourceData(String formId);

    /**
     * 最新的版本
     *
     * @return
     */
    Integer getLatestVersionByCode(String formCode);

    /**
     * 列表
     *
     * @param params
     * @return
     */
    List<FormDTO> list(Map<String, Object> params);

    /**
     * 版本最新列表
     *
     * @param params
     * @return
     */
    List<FormDTO> listLatest(Map<String, Object> params);

    /**
     * 列表
     *
     * @param formIds 表单ID列表
     * @return
     */
    List<FormDTO> listByIds(List<String> formIds);

    /**
     * 列表
     *
     * @param params
     * @return
     */
    List<FormPO> listPO(Map<String, Object> params);

    /**
     * 版本最新列表
     *
     * @param params
     * @return
     */
    List<FormPO> listPOLatest(Map<String, Object> params);

    /**
     * 分页列表
     *
     * @param page
     * @return
     */
    SuccessResultList<List<FormDTO>> listPage(ListPage page);


    /**
     * 最新表单分页列表
     *
     * @param page
     * @return
     */
    SuccessResultList<List<FormDTO>> listPageLatest(ListPage page);

    /**
     * 历史表单分页列表
     *
     * @param formId
     * @param page
     * @return
     */
    SuccessResultList<List<FormDTO>> listPageHistoryByFormId(String formId, ListPage page);
}
