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

import ink.wgink.module.form.pojo.dtos.design.FormFieldDTO;
import ink.wgink.module.form.pojo.pos.design.FormFieldPO;
import ink.wgink.module.form.pojo.vos.design.FormFieldVO;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.SuccessResultList;

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

public interface IFormFieldService {

    /**
     * 新增
     *
     * @param formFieldVO
     * @return
     */
    void save(FormFieldVO formFieldVO);

    /**
     * 新增
     *
     * @param formFieldVO
     * @return 新增ID
     */
    String saveReturnId(FormFieldVO formFieldVO);

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

    /**
     * 删除
     *
     * @param formIds 表单ID
     */
    void deleteByFormIds(List<String> formIds);

    /**
     * 修改
     *
     * @param fieldId     表单字段ID
     * @param formFieldVO
     * @return
     */
    void update(String fieldId, FormFieldVO formFieldVO);

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

    /**
     * 详情
     *
     * @param fieldId 表单字段ID
     * @return
     */
    FormFieldDTO get(String fieldId);

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

    /**
     * 详情
     *
     * @param fieldId 表单字段ID
     * @return
     */
    FormFieldPO getPO(String fieldId);

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

    /**
     * 列表
     *
     * @param formId 表单ID
     * @return
     */
    List<FormFieldDTO> listByFormId(String formId);

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

    /**
     * 表单字段列表
     *
     * @param formId
     * @return
     */
    List<FormFieldPO> listPOByFormId(String formId);

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

    /**
     * 字段名列表
     *
     * @param params
     * @return
     */
    List<String> listFieldName(Map<String, Object> params);

    /**
     * 字段名列表
     *
     * @param formId     表单ID
     * @param isListShow 列表显示状态
     * @return
     */
    List<String> listFieldNameByFormIdAndListShow(String formId, Boolean isListShow);

    /**
     * 字段列表
     *
     * @param formCode    表单编码
     * @param formVersion 表单版本
     * @return
     */
    List<FormFieldDTO> listByFormCodeAndVersion(String formCode, Integer formVersion);

}
