package com.gic.haoban.manage.service.service;

import com.gic.haoban.manage.api.dto.QywxTagInfoDTO;
import com.gic.haoban.manage.api.dto.QywxTagItemDTO;
import com.gic.haoban.manage.api.dto.QywxTagRelationDTO;
import com.gic.haoban.manage.service.entity.TabQywxTag;
import com.gic.haoban.manage.service.entity.TabQywxTagItem;
import com.gic.haoban.manage.service.entity.TabQywxTagRelation;
import com.gic.wechat.api.dto.qywx.QywxTagGroupDTO;
import org.apache.commons.lang3.tuple.Pair;

import java.util.List;

/**
 * Created 2021/6/21.
 *
 * @author hua
 */
public interface QywxTagService {
    /**
     * 根据标签组key 查询详情
     *
     * @param wxEnterpriseId
     * @param groupKey
     * @return
     */
    public TabQywxTag getQywxTagByQywxGroupKey(String wxEnterpriseId, String groupKey);

    /**
     * 根据标签组key 查询详情
     *
     * @param wxEnterpriseId
     * @param id
     * @return
     */
    public TabQywxTag getQywxTagByQywxTagId(String wxEnterpriseId, String id);

    /**
     * 根据id 查询列表
     *
     * @param wxEnterpriseId
     * @param qywxTagId
     * @return
     */
    public List<TabQywxTagItem> listByQywxTagId(String wxEnterpriseId, String qywxTagId);

    /**
     * 查询所有同步的企业微信标签
     *
     * @param wxEnterpriseId
     * @return
     */
    public List<TabQywxTagRelation> listAllQywxRelation(String wxEnterpriseId);

    /**
     * 保存企业微信的标签
     *
     * @param wxEnterpriseId
     * @param groupDTO
     * @return
     */
    public Pair<TabQywxTag, List<TabQywxTagItem>> saveQywxTagByQywxGroupKey(String wxEnterpriseId, QywxTagGroupDTO groupDTO);


    /**
     * 保存企业微信的标签
     *
     * @param wxEnterpriseId
     * @return
     */
    public void saveQywxTagByQywxGroupKey(String wxEnterpriseId, QywxTagInfoDTO infoDTO, List<QywxTagItemDTO> items);

    /**
     * 关闭同步
     *
     * @param wxEnterpriseId
     * @param memberTagId
     * @return
     */
    public boolean closeSync(String wxEnterpriseId, String memberTagId);

    /**
     * 保存标签
     *
     * @param list
     * @return
     */
    public boolean saveQywxRelation(List<TabQywxTagRelation> list);

    /**
     * 根据id 查询
     *
     * @param relationId
     * @return
     */
    //无效接口
//    public TabQywxTagRelation getQywxTagRelationById(String relationId);

    /**
     * 根据id 查询
     *
     * @param memberTagId
     * @return
     */
    public List<TabQywxTagRelation> listQywxTagRelationByMemberTagId(String wxEnterpriseId, String memberTagId);

    /**
     * 根据tagItemId 查询
     *
     * @param tagItemId
     * @return
     */
    public TabQywxTagRelation getQywxTagRelationByTagItemId(String wxEnterpriseId, String tagItemId);

    /**
     * 根据qywxTagId查询
     *
     * @param qywxTagId
     * @return
     */
    public List<TabQywxTagRelation> listQywxTagRelationByQywxTagId(String wxEnterpriseId, String qywxTagId);

    /**
     * 删除企业微信的标签
     *
     * @param groupKey
     * @param wxEnterpriseId
     * @return
     */
    public boolean delQywxTag(String groupKey, String wxEnterpriseId);

    /**
     * 根据企业微信的标签项获取 标签项
     *
     * @param wxEnterpriseId
     * @param qywxTagKey
     * @return
     */
    public TabQywxTagItem getQywxTagItemByQywxItemKey(String wxEnterpriseId, String qywxTagKey);

    /**
     * 删除标签项
     *
     * @param wxEnterpriseId
     * @param id
     * @return
     */
    public boolean delQywxTagItemById(String wxEnterpriseId, String id);

    /**
     * 根据企业微信的key 查询关联关系
     *
     * @param wxEnterpriseId
     * @param key
     * @param qywxTagRelationType
     * @return
     */
    public TabQywxTagRelation getQywxTagRelationByQywxKey(String wxEnterpriseId, String key, Integer qywxTagRelationType);

    /**
     * 根据企业微信的标签项获取 标签项列表
     *
     * @param wxEnterpriseId
     * @param ids
     * @return
     */
    public List<TabQywxTagItem> listQywxTagItemByIds(String wxEnterpriseId, List<String> ids);

    /**
     * 变更状态
     *
     * @param id
     * @param status
     */
    public void changeTagRelationStatus(String id, int status);

    /**
     * 根据企业微信的标签项获取 标签项
     *
     * @param wxEnterpriseId
     * @param id
     * @return
     */
    public TabQywxTagItem getQywxTagItemById(String wxEnterpriseId, String id);

    /**
     * 更新名称
     *
     * @return
     */
    public boolean saveQywxTagOrTagItemName(String id, String name, Integer relationType);


    /**
     * 更新名称
     *
     * @return
     */
    public boolean changeRelationSyncFlagByMemberTagId(String wxEnterpriseId, String memberTagId, Integer syncFlag);

    /**
     * 更新状态
     *
     * @return
     */
    public boolean changeRelationSyncFlagByTagItemId(String wxEnterpriseId, String tagItemId, Integer syncFlag);


}
