package com.jsowell.api.uniapp;

import com.alibaba.fastjson2.JSONObject;
import com.jsowell.common.annotation.Anonymous;
import com.jsowell.common.core.controller.BaseController;
import com.jsowell.common.core.domain.AjaxResult;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.response.RestApiResponse;
import com.jsowell.common.util.file.AliyunOssUploadUtils;
import com.jsowell.common.util.file.FileUtils;
import com.jsowell.pile.service.IPileBasicInfoService;
import com.jsowell.pile.vo.uniapp.GroundLockInfoVO;
import com.jsowell.pile.vo.uniapp.PileConnectorVO;
import com.jsowell.service.PileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;


@Anonymous
@RestController
@RequestMapping("/app-xcx-h5/xixiao")
public class JumpXixiaoController extends BaseController {

	@Autowired
	private PileService pileService;

	@Autowired
	private IPileBasicInfoService pileBasicInfoService;

	/**
	 * 查询充电桩详情
	 * http://localhost:8080/app-xcx-h5/pile/pileDetail/{pileSn}
	 */
	@GetMapping("/pile/pileDetail/{pileSn}")
	public RestApiResponse<?> getPileDetail(HttpServletRequest request, @PathVariable("pileSn") String pileSn) {
		// logger.info("app-xcx-h5查询充电桩详情 param:{}", pileSn);
		logger.info("User-Agent:{}", request.getHeader("user-agent"));
		RestApiResponse<?> response = null;
		try {
			PileConnectorVO vo = pileService.getPileDetailByPileSn(pileSn);
			response = new RestApiResponse<>(vo);
		} catch (BusinessException e) {
			logger.warn("app-xcx-h5查询充电桩详情 warn", e);
			response = new RestApiResponse<>(e.getCode(), e.getMessage());
		} catch (Exception e) {
			logger.error("app-xcx-h5查询充电桩详情 error", e);
			response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_PILE_DETAIL_ERROR);
		}
		logger.info("app-xcx-h5查询充电桩详情 param:{}, result:{}", pileSn, JSONObject.toJSONString(response));
		return response;
	}

	/**
	 * 查询充电枪口详情
	 * http://localhost:8080/app-xcx-h5/pile/connectorDetail/{pileConnectorCode}
	 */
	@GetMapping("/pile/connectorDetail/{pileConnectorCode}")
	public RestApiResponse<?> getConnectorDetail(HttpServletRequest request, @PathVariable("pileConnectorCode") String pileConnectorCode) {
		// logger.info("app-xcx-h5查询充电枪口详情 param:{}", pileConnectorCode);
		logger.info("User-Agent:{}", request.getHeader("user-agent"));
		RestApiResponse<?> response = null;
		try {
			PileConnectorVO vo = pileService.getConnectorDetail(pileConnectorCode);
			response = new RestApiResponse<>(vo);
		} catch (BusinessException e) {
			logger.warn("app-xcx-h5查询充电枪口详情 warn param:{}", pileConnectorCode, e);
			response = new RestApiResponse<>(e.getCode(), e.getMessage());
		} catch (Exception e) {
			logger.error("app-xcx-h5查询充电枪口详情 error param:{}", pileConnectorCode, e);
			response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_PILE_DETAIL_ERROR);
		}
		logger.info("app-xcx-h5查询充电枪口详情 param:{} result:{}", pileConnectorCode, JSONObject.toJSONString(response));
		return response;
	}

	/**
	 * 上传到阿里云oss
	 * http://localhost:8080/app-xcx-h5/uploadOSS
	 * @param file
	 * @return
	 */
	@CrossOrigin
	@PostMapping("/uploadOSS")
	public AjaxResult uploadFileOSS(MultipartFile file) {
		try {
			String url = AliyunOssUploadUtils.uploadFile(file);
			AjaxResult ajax = AjaxResult.success();
			ajax.put("url", url);
			ajax.put("fileName", FileUtils.getName(url));
			ajax.put("newFileName", FileUtils.getName(url));
			ajax.put("originalFilename", file.getOriginalFilename());
			return ajax;
		}catch (Exception e){
			return AjaxResult.error(e.getMessage());
		}
	}

	/**
	 * 获取地锁列表信息
	 * http://localhost:8080/app-xcx-h5/getGroundLockInfo/{stationId}
	 * @param stationId
	 * @return
	 */
	@GetMapping("/getGroundLockInfo/{stationId}")
	public RestApiResponse<?> getGroundLockInfo(@PathVariable("stationId") String stationId) {
		logger.info("获取地锁列表信息 params:{}", stationId);
		RestApiResponse<?> response = null;
		try {
			List<GroundLockInfoVO> list = pileBasicInfoService.getGroundLockInfo(stationId);
			response = new RestApiResponse<>(list);
		} catch (Exception e) {
			logger.error("获取地锁列表信息 error, ", e);
			response = new RestApiResponse<>(e);
		}
		logger.info("获取地锁列表信息 result:{}", response);
		return response;
	}
}
