package com.xjrsoft.module.form.service;

import cn.hutool.db.Entity;
import cn.hutool.db.Session;
import com.xjrsoft.common.page.PageOutput;
import com.xjrsoft.module.form.dto.AppFormExecuteAddOrUpdateDto;
import com.xjrsoft.module.form.dto.AppFormExecuteDeleteDto;
import com.xjrsoft.module.form.dto.AppFormExecuteInfoDto;
import com.xjrsoft.module.form.dto.AppFormExecuteListDto;
import com.xjrsoft.module.form.dto.AppFormExecutePageDto;
import com.xjrsoft.module.form.dto.FormExecuteAddOrUpdateDto;
import com.xjrsoft.module.form.dto.FormExecuteDeleteDto;
import com.xjrsoft.module.form.dto.FormExecuteInfoDto;
import com.xjrsoft.module.form.dto.FormExecuteListDto;
import com.xjrsoft.module.form.dto.FormExecutePageDto;
import com.xjrsoft.module.form.dto.FormExecuteWorkflowAddDto;
import com.xjrsoft.module.form.dto.FormExecuteWorkflowInfoDto;
import com.xjrsoft.module.form.dto.FormExecuteWorkflowUpdateDto;
import com.xjrsoft.module.form.vo.DeskTableInfoVo;
import org.apache.commons.lang3.tuple.Triple;

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

/**
 * @Author: tzx
 * @Date: 2022/5/11 14:57
 */
public interface IFormExecuteService {
    /**
     * 获取自定义表单不分页列表数据
     * @param dto
     * @return
     */
    List<Entity> list(FormExecuteListDto dto);

    /**
     * App 获取自定义表单不分页列表数据
     * @param dto
     * @return
     */
    List<Entity> appList(AppFormExecuteListDto dto);

    /**
     * 获取自定义表单分页列表数据
     * @param dto
     * @return
     */
    PageOutput<Entity> page(FormExecutePageDto dto);

    /**
     * App 获取自定义表单分页列表数据
     * @param dto
     * @return
     */
    PageOutput<Entity> appPage(AppFormExecutePageDto dto);

    /**
     * 获取自定义表单 表单数据
     * @return
     */
    Object info(FormExecuteInfoDto dto);

    /**
     * 获取自定义表单 表单数据
     * @return
     */
    Object getInfoByTemplateId(FormExecuteInfoDto dto);

    /**
     * App 获取自定义表单 表单数据
     * @return
     */
    Object appInfo(AppFormExecuteInfoDto dto);

    Long addByTemplateId(FormExecuteAddOrUpdateDto dto);

    /**
     * 自定义表单 新增
     * @param dto
     * @return
     */
    Boolean add(FormExecuteAddOrUpdateDto dto);

    /**
     * App 自定义表单 新增
     * @param dto
     * @return
     */
    Boolean appAdd(AppFormExecuteAddOrUpdateDto dto);

    /**
     * 自定义表单 修改
     * @param dto
     * @return
     */
    Boolean update(FormExecuteAddOrUpdateDto dto);

    /**
     * app 自定义表单 修改
     * @param dto
     * @return
     */
    Boolean appUpdate(AppFormExecuteAddOrUpdateDto dto);

    /**
     * 自定义表单 删除
     * @param dto
     * @return
     */
    Boolean delete(FormExecuteDeleteDto dto);

    /**
     * app 自定义表单 删除
     * @param dto
     * @return
     */
    Boolean appDelete(AppFormExecuteDeleteDto dto);

    /**
     * 工作流调用 自定义表单 新增
     * @param dto
     * @return
     */
    Triple<Session, Long, Long> workflowAdd(FormExecuteWorkflowAddDto dto);


    /**
     * 工作流调用 自定义表单 修改
     * @param dto
     * @return
     */
    Triple<Session, Long, Long> workflowUpdate(FormExecuteWorkflowUpdateDto dto);

    /**
     * 工作流调用 自定义表单 新增或者修改
     * @param dto
     * @return
     */

    Triple<Session, Boolean, Long> workflowAddOrUpdate(FormExecuteWorkflowUpdateDto dto);

    /**
     * 获取自定义表单 表单数据
     * @return
     */
    Object workFlowInfo(FormExecuteWorkflowInfoDto dto);

    /**
     * 批量新增主表数据
     * @return
     */
    Boolean saveMainBatch(Long formTemplateId, List<Map<String, Object>> dataList);



    DeskTableInfoVo getTableInfo(Long formId);
}
