package com.tuoheng.admin.service.inspection.query;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tuoheng.admin.entity.Inspection;
import com.tuoheng.admin.entity.LiveChannel;
import com.tuoheng.admin.enums.InspectionStatusEnum;
import com.tuoheng.admin.enums.MarkEnum;
import com.tuoheng.admin.enums.code.inspection.QueryVideoServiceEnum;
import com.tuoheng.admin.mapper.InspectionMapper;
import com.tuoheng.admin.mapper.LiveChannelMapper;
import com.tuoheng.admin.vo.InspectionVideoVo;
import com.tuoheng.admin.vo.LiveChannelVo;
import com.tuoheng.common.core.config.common.CommonConfig;
import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.common.core.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Collections;
import java.util.List;

/**
 * 根据任务id查询视频直播和回放
 *
 * @Author ChengWang
 * @Date 2022/11/29
 */
@Service
@Slf4j
public class QueryVideoService {

    @Autowired
    private InspectionMapper inspectionMapper;

    @Autowired
    private LiveChannelMapper liveChannelMapper;


    public JsonResult getVideoById(String id) {
        if (StringUtils.isEmpty(id)) {
            return JsonResult.error(QueryVideoServiceEnum.INSPECTION_ID_IS_NULL.getCode(), QueryVideoServiceEnum.INSPECTION_ID_IS_NULL.getMsg());
        }
        //根据id查询对应的任务
        Inspection inspection = inspectionMapper.selectById(id);
        if (ObjectUtil.isNull(inspection)) {
            return JsonResult.error(QueryVideoServiceEnum.INSPECTION_IS_NOT_EXIST.getCode(), QueryVideoServiceEnum.INSPECTION_IS_NOT_EXIST.getMsg());

        }
        LiveChannelVo liveChannelVo = new LiveChannelVo();
        if (10 == inspection.getStatus()) {
            //任务状态为任务飞行中10视频直播
            LiveChannel liveChannel = liveChannelMapper.selectOne(new LambdaQueryWrapper<LiveChannel>()
                    .eq(LiveChannel::getMark, 1)
                    .eq(LiveChannel::getInspectionId, inspection.getId())
                    .eq(LiveChannel::getStatus, 1));
            if (ObjectUtil.isNull(liveChannel)) {
                return JsonResult.error(QueryVideoServiceEnum.LIVE_CHANNEL_IS_NOT_EXIST.getCode(), QueryVideoServiceEnum.LIVE_CHANNEL_IS_NOT_EXIST.getMsg());
            }
            if (StringUtils.isEmpty(liveChannel.getAipullUrl())) {
                return JsonResult.error(QueryVideoServiceEnum.AIPULL_URL_IS_NOT_NULL.getCode(), QueryVideoServiceEnum.AIPULL_URL_IS_NOT_NULL.getMsg());
            }
            liveChannelVo.setAipullUrl(liveChannel.getAipullUrl());

        }
        if (15 == inspection.getStatus()) {
            //任务状态为任务飞行完成15视频回放
            if (StringUtils.isEmpty(inspection.getAiVideoUrl())) {
                return JsonResult.error(QueryVideoServiceEnum.AIVIDEO_URL_IS_NOT_NULL.getCode(), QueryVideoServiceEnum.AIVIDEO_URL_IS_NOT_NULL.getMsg());
            }
            liveChannelVo.setAiVideoUrl(CommonConfig.videoURL + inspection.getAiVideoUrl());
        }
        return JsonResult.success(liveChannelVo);
    }

    public JsonResult videoByAirportId(Integer id) {
        if (id == null) {
            return JsonResult.error(QueryVideoServiceEnum.AIRPORT_ID_IS_NULL.getCode(), QueryVideoServiceEnum.AIRPORT_ID_IS_NULL.getMsg());
        }
        //根据机场id查询对应正在巡检的任务
        //Inspection inspection = inspectionMapper.selectInspectionByAirport(id);
        List<Inspection> inspectionList = inspectionMapper.selectList(Wrappers.<Inspection>lambdaQuery()
                .eq(Inspection::getStatus, InspectionStatusEnum.IN_FLIGHT.getCode())
                .eq(Inspection::getMark, MarkEnum.VALID.getCode()).eq(Inspection::getAirportId, id));
        if(CollectionUtils.isEmpty(inspectionList)){
            return JsonResult.error(QueryVideoServiceEnum.INSPECTION_IS_NOT_EXIST.getCode(), QueryVideoServiceEnum.INSPECTION_IS_NOT_EXIST.getMsg());

        }
        if(inspectionList.size()>1){
            return JsonResult.error("当前机场对应的正在飞行的任务存在多个,请检查！");
        }
//        if(ObjectUtils.isEmpty(inspection)){
//            return JsonResult.error(QueryVideoServiceEnum.INSPECTION_IS_NOT_EXIST.getCode(), QueryVideoServiceEnum.INSPECTION_IS_NOT_EXIST.getMsg());
//        }
        InspectionVideoVo vo = new InspectionVideoVo();
        if (10 == inspectionList.get(0).getStatus()) {
            //任务状态为任务飞行中10视频直播
            LiveChannel liveChannel = liveChannelMapper.selectOne(new LambdaQueryWrapper<LiveChannel>()
                    .eq(LiveChannel::getMark, 1)
                    .eq(LiveChannel::getInspectionId, inspectionList.get(0).getId())
                    .eq(LiveChannel::getStatus, 1));
            if (ObjectUtil.isNull(liveChannel)) {
                return JsonResult.error(QueryVideoServiceEnum.LIVE_CHANNEL_IS_NOT_EXIST.getCode(), QueryVideoServiceEnum.LIVE_CHANNEL_IS_NOT_EXIST.getMsg());
            }
            if (StringUtils.isEmpty(liveChannel.getAipullUrl())) {
                return JsonResult.error(QueryVideoServiceEnum.AIPULL_URL_IS_NOT_NULL.getCode(), QueryVideoServiceEnum.AIPULL_URL_IS_NOT_NULL.getMsg());
            }
            vo.setAipullUrl(liveChannel.getAipullUrl());
            vo.setInspectionId(inspectionList.get(0).getId());
        }

        return JsonResult.success(vo);
    }
}
