package com.izouma.zhirongip.service.demand;

import cn.hutool.core.collection.CollUtil;
import com.izouma.zhirongip.domain.Information;
import com.izouma.zhirongip.domain.Setting;
import com.izouma.zhirongip.domain.demand.CopyrightDemand;
import com.izouma.zhirongip.dto.PageQuery;
import com.izouma.zhirongip.enums.ApplyStatus;
import com.izouma.zhirongip.exception.BusinessException;
import com.izouma.zhirongip.repo.InformationRepo;
import com.izouma.zhirongip.repo.SettingRepo;
import com.izouma.zhirongip.repo.demand.CopyrightDemandRepo;
import com.izouma.zhirongip.utils.JpaUtils;
import lombok.AllArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.stream.Collectors;

@Service
@AllArgsConstructor
public class CopyrightDemandService {

    private final CopyrightDemandRepo copyrightDemandRepo;
    private final SettingRepo         settingRepo;
    private final InformationRepo     informationRepo;

    public Page<CopyrightDemand> all(PageQuery pageQuery) {
        Map<Long, String> settingMap = settingRepo.findAllByFlagIn(CollUtil.list(false, 3, 4, 6,24))
                .stream()
                .collect(Collectors.toMap(Setting::getId, Setting::getName));
        return copyrightDemandRepo.findAll(JpaUtils.toSpecification(pageQuery, CopyrightDemand.class), JpaUtils.toPageRequest(pageQuery))
                .map(cd -> {
                    if(cd.getModeId()!=null){
                        cd.setMode(settingMap.get(cd.getModeId()));
                    }
                    cd.setWorkName(settingMap.get(cd.getWorkType()));
                    return cd;
                });
    }

    public void audit(Long id, boolean pass, String remark) {
        CopyrightDemand record = copyrightDemandRepo.findById(id).orElseThrow(new BusinessException("无记录"));

        Information information = Information.builder()
                .receiveUserId(record.getUserId())
                .isRead(false)
                .build();

        if (pass) {
            record.setStatus(ApplyStatus.PASS);
            copyrightDemandRepo.save(record);

            information.setContent("您发布的需求侧："+record.getName()+"已通过审核！");
            informationRepo.save(information);
            return;
        }
        record.setStatus(ApplyStatus.DENY);
        copyrightDemandRepo.save(record);

        information.setContent("您发布的的需求侧："+record.getName()+"未通过审核，原因为：" + remark);
        informationRepo.save(information);
    }
}
