package jnpf.personnels.service;

import com.baomidou.mybatisplus.extension.service.IService;
import jnpf.model.personnels.dto.staff.field.ExportFormTypeDto;
import jnpf.model.personnels.dto.staff.field.FormTypeDto;
import jnpf.model.personnels.dto.staff.field.SubFormFieldDto;
import jnpf.model.personnels.dto.staff.registerform.CheckRegisterFormFillDto;
import jnpf.model.personnels.po.FtbPersonnelsRegistrationFormField;
import jnpf.model.personnels.po.FtbPersonnelsStaffRegistrationFormData;
import jnpf.model.personnels.req.registerform.SaveFormDataReq;

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

public interface FtbPersonnelsStaffRegistrationFormDataService extends IService<FtbPersonnelsStaffRegistrationFormData> {


    /**
     * 同步数据
     *
     * @param dataMap
     * @param phone
     */
    void syncData(Map<String, Object> dataMap, String phone, String rosterId);

    void importSyncData(Map<String, Object> dataMap, String phone, String rosterId, Map<String, FtbPersonnelsRegistrationFormField> allFormFieldListMap);

    /**
     * 查询入职登记表
     *
     * @param phone 手机号
     * @return
     */
    List<FormTypeDto> queryRegistrationForm(String phone, Boolean registerForm);

    /**
     * 查询入职登记表
     *
     * @return
     */
    List<FormTypeDto> queryRegistrationForm();

    /**
     * 检测入职登记表是否已经填写
     *
     * @param phone
     * @return
     */
    CheckRegisterFormFillDto checkRegistrationFormFill(String phone);

    /**
     * 根据用户ID查询档案信息
     *
     * @param userId 用户ID
     * @return
     */
    List<FormTypeDto> queryArchivalForm(String userId);

    /**
     * 根据用户ID查询档案信息
     *
     * @param userId 用户ID
     * @return
     */
    List<FormTypeDto> queryArchivalForm(String userId, String tenantId);

    List<FormTypeDto> queryAndFillFormFieldValue(String phone, String userId, String rosterId, Boolean registerForm);

    /**
     * 保存档案信息
     *
     * @param saveFormDataReq
     */
    void saveArchives(SaveFormDataReq saveFormDataReq);

    /**
     * 根据手机号和花名册id查询所有档案信息
     * @param phone 手机号
     * @param rosterId 花名册id
     * @return
     */
    List<FtbPersonnelsStaffRegistrationFormData> queryFormFieldValueList(String phone, String rosterId);
    /**
     * 根据手机号
     *
     * @param phones 手机号
     * @return
     */
    Map<String, List<FtbPersonnelsStaffRegistrationFormData>> queryFormFieldValueListWithPhone(List<String> phones);
    /**
     * 根据花名册id查询 用户的所有字段信息
     * @param rosterIds 花名册id集合
     * @return
     */
    List<FtbPersonnelsStaffRegistrationFormData> queryFormFieldValueForRosterIds(List<String> rosterIds);

    /**
     * 查询用户的指定字段
     * @param rosterIds 花名册用户id 集合
     * @param formFieldIds 字段名称集合
     * @return
     */
    List<FtbPersonnelsStaffRegistrationFormData> queryListForRosterIdAndField(List<String> rosterIds, List<String> formFieldIds);

    /**
     * 更新字段
     *
     * @param phone 手机号
     * @param formFieldId 字段名称
     * @param value 字段值
     */
    void updateForOneField(String phone, String formFieldId, String value);
    /**
     * 修改用户的一个字段数据
     * @param rosterId 花名册id
     * @param phone 手机号
     * @param formFieldId 字段名称
     * @param value 字段值
     */
    void updateForOneField(String rosterId, String phone, String formFieldId, String value);

    String queryTenantIdForCode(String code);

    /**
     * 查询动态表中的一个字段的值
     *
     * @param phone 手机号
     * @param rosterId 花名册id
     * @param fieldName 字段名称
     * @return
     */
    String queryOneFieldValue(String phone, String rosterId, String fieldName);
    /**
     * 根据手机号查询字段的值
     * @param phone 手机号
     * @param fieldName 字段名称
     * @return
     */
    String queryOneFieldValueForPhone(String phone, String fieldName);
    /**
     * 查询花名册中的一个字段
     * @param phone 手机号
     * @param rosterId 花名册id
     * @param fieldName 字段名称
     * @return
     */
    FtbPersonnelsStaffRegistrationFormData queryOneField(String phone, String rosterId, String fieldName);

       /**
        * 保存入职登记表信息
        *
        * @param tenantId       租户id
        * @param fieldValueList
        * @param moduleId
        */
       void saveRegistrationForm(String tenantId, List<SubFormFieldDto> fieldValueList, Integer flag, String registerImg, String moduleId);

    /**
     * 根据手机号查询所有已经填写的字段数据
     *
     * @param phone
     * @return
     */
    Map<String, FtbPersonnelsStaffRegistrationFormData> queryAllFormData(String phone, String rosterId);

    Map<String, Map<String, String>> querAllFormDataForRosterIds(List<String> rosterIds);

    /**
     * 查询所有导出字段
     *
     * @return
     */
    public List<ExportFormTypeDto> queryAllFields();

    /**
     * 给入职登记表中没有 绑定rosterId的绑上花名册ID
     *
     * @param phone
     * @param id
     */
    void addRosterIdToFormData(String phone, String id);

    /**
     * 查询有健康证 过期日期的数据
     */
    List<FtbPersonnelsStaffRegistrationFormData> queryHasHealthExpire();


    /**
     * 删除数据
     *
     * @param rosterId 花名册id
     */
    void deleteByRosterId(String rosterId);

    /**
     * 根据字段id查询字段信息
     *
     * @param rosterId 花名册id
     * @param fieldName 字段id
     * @return
     */
    FtbPersonnelsStaffRegistrationFormData queryOneFieldForFieldId(String rosterId, String fieldName);

    void importUpdateData(Map<String, Object> formDataMap, String phone, String rosterId, Map<String, FtbPersonnelsRegistrationFormField> allFormFieldListMap,Map<String, FtbPersonnelsStaffRegistrationFormData> oldFormDataMap);

    /**
     * 批量跟新数据
     * @param formDataList
     */
    void batchUpdateData(List<FtbPersonnelsStaffRegistrationFormData> formDataList);

    void saveArchivesWithPhone(SaveFormDataReq req);

    /**
     * 检查实际入职日期通过，返回true则通过，false及提示语则不通过
     */
    Boolean checkActualJoiningDatePassed(String phone, String userId);
}
