package com.moka.gdtauto.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moka.gdtauto.entity.AccountGroup;

import java.util.List;

/**
 * 账号组服务接口
 * 
 * @author moka
 * @since 2026-02-24
 */
public interface AccountGroupService extends IService<AccountGroup> {

    /**
     * 创建账号组
     * 
     * @param userId 用户ID
     * @param groupName 账号组名称
     * @param deliveryMode 投放模式
     * @param remark 备注
     * @param accountIds 账号ID列表
     * @return 账号组ID
     */
    Long createAccountGroup(Long userId, String groupName, Integer deliveryMode, String remark, List<Long> accountIds);

    /**
     * 更新账号组
     * 
     * @param groupId 账号组ID
     * @param userId 用户ID
     * @param groupName 账号组名称
     * @param deliveryMode 投放模式
     * @param remark 备注
     * @param accountIds 账号ID列表
     * @return 是否成功
     */
    boolean updateAccountGroup(Long groupId, Long userId, String groupName, Integer deliveryMode, String remark, List<Long> accountIds);

    /**
     * 删除账号组
     * 
     * @param groupId 账号组ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean deleteAccountGroup(Long groupId, Long userId);

    /**
     * 获取用户的账号组列表（分页）
     * 
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 账号组分页列表
     */
    Page<AccountGroup> getUserAccountGroups(Long userId, Integer pageNum, Integer pageSize);

    /**
     * 获取账号组详情
     * 
     * @param groupId 账号组ID
     * @param userId 用户ID
     * @return 账号组信息
     */
    AccountGroup getAccountGroupById(Long groupId, Long userId);

    /**
     * 添加账号到账号组
     * 
     * @param groupId 账号组ID
     * @param accountIds 账号ID列表
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean addAccountsToGroup(Long groupId, List<Long> accountIds, Long userId);

    /**
     * 从账号组移除账号
     * 
     * @param groupId 账号组ID
     * @param accountIds 账号ID列表
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean removeAccountsFromGroup(Long groupId, List<Long> accountIds, Long userId);

    /**
     * 获取账号组下的所有账号ID
     * 
     * @param groupId 账号组ID
     * @param userId 用户ID
     * @return 账号ID列表
     */
    List<Long> getAccountIdsByGroupId(Long groupId, Long userId);
}
