package com.seer.teach.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.seer.teach.common.enums.UserRelationEnum;
import com.seer.teach.user.entity.UserRelationEntity;

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

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author Wang
 * @since 2025-07-16 16:56:07
 */
public interface IUserRelationService extends IService<UserRelationEntity> {

    /**
     * 获取孩子数量
     *
     * @param userId 用户id
     * @return 孩子数量
     */
    Long getChildrenUserCountByUserId(Integer userId);

    /**
     * 获取用户关系
     *
     * @param relationId 关系id
     * @return 用户关系
     */
    UserRelationEntity getUserRelationByRelationId(Integer relationId);

    /**
     * 获取用户关系
     *
     * @param userId 用户id
     * @return 用户关系
     */
    List<UserRelationEntity> getUserRelationByUserIdAndType(Integer userId, UserRelationEnum userRelationEnum);

    /**
     * 获取用户关系
     *
     * @param userId 用户id
     * @return 用户关系
     */
    UserRelationEntity getUserRelationByUserIdAndRelationId(Integer userId, Integer relationId, UserRelationEnum userRelationEnum);

    /**
     * 获取用户关系列表
     *
     * @param ids 用户id
     * @param userRelationEnum 用户关系枚举
     * @return 用户关系列表
     */
    List<UserRelationEntity> getUserRelationListByUserIdsAndRelation(Collection<Integer> ids, UserRelationEnum userRelationEnum);

    /**
     * 获取用户关系列表
     *
     * @param userId 用户id
     * @return 用户关系列表
     */
    List<UserRelationEntity> getUserRelationsByUserId(Integer userId);

    /**
     * 获取孩子id的家长id
     *
     * @param childrenId 孩子id
     * @return 家长id
     */
    Integer getParentIdByChildrenId(Integer childrenId);

    /**
     * 根据用户Id获取默认用户关系
     *
     * @param userId 用户id
     * @return 默认用户关系
     */
    UserRelationEntity getDefaultUserRelationByUserId(Integer userId);

    /**
     * 更新默认状态
     *
     * @param userId 用户id
     * @param isDefault 默认状态
     * @return 是否成功
     */
    boolean updateDefaultStatusByUserId(Integer userId, int isDefault);

    /**
     * 更新默认状态
     *
     * @param userId 用户id
     * @param relationId 关系id
     * @return 是否成功
     */
    boolean updateDefaultStatusByUserIdAndRelationId(Integer userId, Integer relationId, int isNotDefault);

    /**
     * 根据家庭id获取用户关系
     *
     * @param familyId 家庭id
     * @param userRelationEnum 用户关系枚举
     * @return 用户关系列表
     */
    List<UserRelationEntity> getUserRelationsByFamilyIdAndType(Integer familyId, UserRelationEnum userRelationEnum);

    /**
     * 根据用户id和家庭id获取用户关系
     *
     * @param userId 用户id
     * @param familyId
     * @return 用户关系列表
     */
    List<UserRelationEntity> getUserRelationByUserIdAndFamilyId(Integer userId, Integer familyId);

    /**
     * 删除用户关系
     *
     * @param userRelation 用户关系
     * @return 是否成功
     */
    boolean deleteUserRelation(UserRelationEntity userRelation);
}
