package com.ruoyi.project.business.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.importExcel.excel.helper.BasicTableInfoHelper;
import com.ruoyi.common.importExcel.excel.tempInfo.AccountInfoHelper;
import com.ruoyi.common.importExcel.utils.ExcelUtils.UploadResult;
import com.ruoyi.project.business.domain.TcAccount;
import com.ruoyi.project.business.domain.TcAccountForRelated;
import com.ruoyi.project.business.domain.vo.account.AgentAddAccount;
import com.ruoyi.project.business.domain.vo.account.AgentAddProject;
import com.ruoyi.project.business.domain.vo.account.CancelMergeReq;
import com.ruoyi.project.business.domain.vo.account.GetAccountByAgentDto;
import com.ruoyi.project.business.domain.vo.board.BarChartVo;
import com.ruoyi.project.business.domain.vo.selectParam.AccountParam;
import java.time.LocalDate;
import java.util.List;
import org.springframework.data.util.Pair;

/**
 * 客户管理Service接口
 *
 * @author ruoyi
 * @date 2024-04-10
 */
public interface ITcAccountService extends IService<TcAccount> {

    /**
     * 查询客户管理
     *
     * @param accountId 客户管理主键
     * @return 客户管理
     */
    public TcAccount selectTcAccountByAccountId(Long accountId);

    /**
     * 查询关联客户
     *
     * @return 客户管理
     */
    public List<TcAccountForRelated> selectAccountListByLoginId();

    public List<TcAccountForRelated> selectAccountListByAccountId(TcAccount tcAccount);
    public List<TcAccountForRelated> selectAccountListByQuery(TcAccount tcAccount);
    /**
     * 查询客户管理列表
     * 
     * @param tcAccount 客户管理
     * @return 客户管理集合
     */
    public List<TcAccount> selectTcAccountList(AccountParam tcAccount);

    public List<AgentAddAccount> selectAgentAddAccount(AccountParam tcAccount);
    public List<AgentAddProject> selectAgentAddProject(AccountParam tcAccount);

    public List<TcAccount> selectTcAccountListExport(AccountParam tcAccount);

    /**
     * 新增客户管理
     * 
     * @param tcAccount 客户管理
     * @return 结果
     */
    public int insertTcAccount(TcAccount tcAccount);

    /**
     * 修改客户管理
     * 
     * @param tcAccount 客户管理
     * @return 结果
     */
    public int updateTcAccount(TcAccount tcAccount);

    /**
     * 批量删除客户管理
     * 
     * @param accountIds 需要删除的客户管理主键集合
     * @return 结果
     */
    public int deleteTcAccountByAccountIds(Long[] accountIds);

    /**
     * 删除客户管理信息
     * 
     * @param accountId 客户管理主键
     * @return 结果
     */
    public int deleteTcAccountByAccountId(Long accountId);

    /**
     * 客户合并
     *
     * @param tcAccountList 待合并客户
     * @return 结果
     */
    int merge(List<TcAccount> tcAccountList);

    /**
     * 客户统计
     */
    BarChartVo getCustomerCountStat(LocalDate startDate, LocalDate endDate, String statMode);

    /**
     * 客户导入数据校验
     */
    UploadResult<AccountInfoHelper> checkAccountInfo(BasicTableInfoHelper basicTableInfoHelper, List<AccountInfoHelper> accountInfoHelpers);

    /**
     * 客户导入数据批量插入
     */
    List<String> insertTcAccountExcel(BasicTableInfoHelper basicTableInfoHelper, List<AccountInfoHelper> transform);

    List<TcAccount> listRemote(String query);

    Integer existCustomerByAgentIds(Long[] agentIds);

    /**
     * 根据区域id获取权限字段串
     */
    String getPermissionChar(Long areaId);

    int cancelMerge(CancelMergeReq tcAccountList);

    List<Pair<Long, String>> selectCountriesByCurUser();

    List<GetAccountByAgentDto> getAccountByAgent( Long ownerAgent);

    List<Pair<Long, String>> selectAreasByCurUser();

    boolean changeOwner(TcAccount tcAccount);

    List<TcAccount> listByAccountNameList(List<String> accountNameList);
}
