package com.yeejoin.amos.boot.module.tcm.flc.api.service;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.utils.Menu;
import com.yeejoin.amos.boot.module.tcm.flc.api.dto.RegUnitInfoDto;

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

/**
 * 单位注册信息表接口类
 *
 * @author system_generator
 * @date 2022-08-09
 */
public interface IRegUnitInfoService {

    /**
     * 单位注册
     * @param model RegUnitInfoDto
     * @return RegUnitInfoDto
     */
    RegUnitInfoDto registerUnit(RegUnitInfoDto model);

    /**
     * 单位类型列表字典
     * @return List<DataDictionary>
     */
    List<DataDictionary> getUnitTypeList();

    List<DataDictionary> getPersonTypeList();

    /**
     * 获取管辖机构树
     * @return 组织架构中单位级别为：省级、地市级、区县级的单位
     */
    Collection getManagementUnitTree(String orgCode);

    /**
     * 单位注销
     * @param unitCode 单位唯一标识
     * @return 是否成功
     */
    Boolean unitLogOut(String unitCode);

    /**
     * 校验是否已经存在相同的账号
     * @param userName 账号
     * @return true 已存在相同账号，不能注册 false 不存在账号，可以注册
     */
    Boolean checkRepeatAccount(String userName);

    /**
     * 手机号重复校验
     * @param phoneNo 手机号
     * @return true 已存在不能注册 false 不存在可以注册
     */
    Boolean checkRepeatPhone(String phoneNo);

    void updateAdminInfo(JSONObject dataResult);

    Boolean creatQrCode();

    RegUnitInfoDto adminInfo(String unitCode);

    String submit(Long pageId, String taskId, String planInstanceId, String topic, String tableName, Map<String, Object> objectMap) throws Exception;

    List<DataDictionary> getChildList(String type, String group);

    void setAllDataDictionaryList();

    List<Menu> getDictionaryWithTreeFillId(String type) throws Exception;
    List<DataDictionary> getDictionaryListByType(String type) throws Exception;
    List<DataDictionary> getDictionaryListInType(String type) throws Exception;

    List<DataDictionary> getXkItemList(String type);

    /**
     * 企业类型单位注册检验
     * @param unitCode     单位code
     * @param isNationwide 是否省外
     * @return RegUnitInfoDto
     */
    RegUnitInfoDto regBeforeCheckForEnterprises(String unitCode, Boolean isNationwide);

    /**
     * 事业单位类型注册检验
     * @param unitCode      单位code
     * @param isNationwide  是否省外
     * @return RegUnitInfoDto
     */
    RegUnitInfoDto regBeforeCheckForCause(String unitCode, Boolean isNationwide);

    /**
     * 个人类型注册检验
     * @param unitCode  单位code
     * @param cardType  证件类型
     * @return RegUnitInfoDto
     */
    RegUnitInfoDto regBeforeCheckForPerson(String unitCode, String cardType);

    JSONArray queryUnitType(String type);
}
