package com.flossom.miniProgram.controller;

import com.flossom.common.core.constant.Constants;
import com.flossom.common.core.domain.R;
import com.flossom.common.core.domain.SysFile;
import com.flossom.common.core.domain.req.WxClockLogReq;
import com.flossom.common.core.exception.ServiceException;
import com.flossom.common.core.web.controller.BaseController;
import com.flossom.miniProgram.service.IWxClockLogService;
import com.flossom.system.api.RemoteFileService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.constraints.NotNull;
import java.util.ArrayList;

/**
 * 用户打卡Controller
 *
 * @author flossom
 * @date 2024-01-27
 */
@RestController
@RequestMapping("/clock")
public class WxClockLogController extends BaseController {

    @Autowired
    private IWxClockLogService wxClockLogService;

    @Autowired
    private RemoteFileService remoteFileService;

    /**
     * 添加用户使用仪器记录表
     */
    @GetMapping("/addClockInstrument")
    public R addClockInstrument(@NotNull(message = "请选择仪器ID") @RequestParam("instrumentId") Long instrumentId) {
        wxClockLogService.addClockInstrument(instrumentId);
        return R.ok();
    }

    /**
     * 获取用户打卡
     */
    @GetMapping("/getClockByUserId")
    public R getClockByUserId() {
        return R.ok(wxClockLogService.getClockByUserId());
    }

    /**
     * 新增用户打卡
     * 需要记录当天使用过的全部仪器（打卡前后的全部仪器）
     * firstClockImg 第一张图片是必须的
     */
    @PostMapping("/insertClockLog")
    public R insertClockLog(@RequestParam(value = "firstClockImg") MultipartFile firstClockImg,
                            @RequestParam(value = "secondClockImg") MultipartFile secondClockImg,
                            @RequestParam(value = "thirdClockImg") MultipartFile thirdClockImg,
                            @Validated WxClockLogReq wxClockLogReq) {
        if (firstClockImg != null && StringUtils.isNotBlank(firstClockImg.getOriginalFilename())) {
            R<SysFile> result = remoteFileService.upload(firstClockImg);
            if (result.getCode() != Constants.SUCCESS) {
                logger.error("上传打卡图片失败");
                throw new ServiceException("上传打卡图片失败");
            }
            if (wxClockLogReq.getClockImageList() != null && wxClockLogReq.getClockImageList().size() > 0) {
                wxClockLogReq.getClockImageList().set(0, result.getData().getUrl());
            } else {
                wxClockLogReq.getClockImageList().add(result.getData().getUrl());
            }
        }
        if (secondClockImg != null && StringUtils.isNotBlank(secondClockImg.getOriginalFilename())) {
            R<SysFile> result = remoteFileService.upload(secondClockImg);
            if (result.getCode() != Constants.SUCCESS) {
                logger.error("上传打卡图片失败");
                throw new ServiceException("上传打卡图片失败");
            }
            if (wxClockLogReq.getClockImageList() != null && wxClockLogReq.getClockImageList().size() > 1) {
                wxClockLogReq.getClockImageList().set(1, result.getData().getUrl());
            } else {
                wxClockLogReq.getClockImageList().add(result.getData().getUrl());
            }
        }
        if (thirdClockImg != null && StringUtils.isNotBlank(thirdClockImg.getOriginalFilename())) {
            R<SysFile> result = remoteFileService.upload(thirdClockImg);
            if (result.getCode() != Constants.SUCCESS) {
                logger.error("上传打卡图片失败");
                throw new ServiceException("上传打卡图片失败");
            }
            if (wxClockLogReq.getClockImageList() != null && wxClockLogReq.getClockImageList().size() > 2
                    && StringUtils.isNotBlank(wxClockLogReq.getClockImageList().get(2))) {
                wxClockLogReq.getClockImageList().set(2, result.getData().getUrl());
            } else {
                wxClockLogReq.getClockImageList().add(result.getData().getUrl());
            }
        }

        if (wxClockLogReq.getClockImageList() == null || wxClockLogReq.getClockImageList().size() == 0) {
            logger.error("请上传打卡图片");
            throw new ServiceException("请上传打卡图片");
        }
        if (wxClockLogReq.getClockImageList().size() > 3) {
            logger.error("打卡图片只能上传3张以下");
            throw new ServiceException("打卡图片只能上传3张以下");
        }
        wxClockLogService.insertWxClockLog(wxClockLogReq);
        return R.ok();
    }


}
