package com.seer.teach.mp.admin.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.seer.teach.common.PageListBean;
import com.seer.teach.common.utils.PageConverterUtils;
import com.seer.teach.mp.admin.controller.req.AgentQueryReq;
import com.seer.teach.mp.admin.controller.req.MpAgentReq;
import com.seer.teach.mp.admin.controller.resp.AgentResp;
import com.seer.teach.mp.admin.convert.AgentConvert;
import com.seer.teach.mp.entity.MpAgentEntity;
import com.seer.teach.mp.service.IMpAgentService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.List;

@Slf4j
@RequiredArgsConstructor
@Service
public class AdminAgentService {

    private final IMpAgentService mpAgentService;

    /**
     * 获取代理商列表
     *
     * @param pageReq 分页参数
     * @return 代理商列表
     */
    public PageListBean<AgentResp> pageList(AgentQueryReq pageReq) {
        Page<MpAgentEntity> pageParam = new Page<>(pageReq.getPageNo(), pageReq.getPageSize());

        MpAgentEntity query = AgentConvert.INSTANCE.convertOne(pageReq);
        IPage<MpAgentEntity> resultPage = mpAgentService.page(pageParam, new LambdaQueryWrapper<>(MpAgentEntity.class)
                .like(StringUtils.isNotBlank(query.getAgentName()), MpAgentEntity::getAgentName, query.getAgentName())
                .eq(query.getStatus() != null, MpAgentEntity::getStatus, query.getStatus())
                .like(StringUtils.isNotBlank(query.getContactName()), MpAgentEntity::getContactName, query.getContactName())
                .like(StringUtils.isNotBlank(query.getAgentCode()), MpAgentEntity::getAgentCode, query.getAgentCode())
                .like(StringUtils.isNotBlank(query.getAgentLevel()), MpAgentEntity::getAgentLevel, query.getAgentLevel())
                .like(StringUtils.isNotBlank(query.getContactPhone()), MpAgentEntity::getContactPhone, query.getContactPhone()));

        return PageConverterUtils.convertPageListBean(resultPage, AgentConvert.INSTANCE::convertRespList);
    }

    /**
     * 获取代理商详情
     *
     * @param id 代理商Id
     * @return 代理商详情
     */
    public AgentResp getAgentById(Integer id) {
        MpAgentEntity agentEntity = mpAgentService.getAgentById(id);
        return AgentConvert.INSTANCE.convertOne(agentEntity);
    }

    /**
     * 保存代理商
     *
     * @param req 代理商
     * @return 是否成功
     */
    public Boolean saveAgent(MpAgentReq req) {
        MpAgentEntity agentEntity = AgentConvert.INSTANCE.convertOne2Entity(req);
        boolean result = mpAgentService.saveAgent(agentEntity,req.getPassword());
        log.info("保存代理商结果: {}", result);
        return result;
    }

    /**
     * 更新代理商
     *
     * @param req 代理商
     * @return 是否成功
     */
    public Boolean updateAgent(MpAgentReq req) {
        MpAgentEntity agentEntity = AgentConvert.INSTANCE.convertOne2Entity(req);
        boolean result = mpAgentService.updateAgent(agentEntity);
        log.info("更新代理商结果: {}", result);
        return result;
    }

    /**
     * 删除代理商
     *
     * @param ids 代理商ID列表
     * @return 是否成功
     */
    public Boolean deleteById(List<Integer> ids) {
        if (ids == null || ids.isEmpty()) {
            log.warn("删除代理商时，ID列表为空");
            return false;
        }
        boolean result = mpAgentService.removeByIds(ids);
        log.info("删除代理商结果: {}", result);
        if (result) {
            log.info("删除代理商成功，ID列表: {}", ids);
        }
        return result;
    }
}