import { ElMessage } from 'element-plus';
import {
  postPayloadAuth,
  postPayloadCommands,
  PayloadCommandsEnum,
  PostCameraModeBody,
  PostCameraFocalLengthBody,
  PostGimbalResetBody,
  PostCameraAimBody,
} from '@/api/drone-control/payload'
import { ControlSource } from '@/types/device'

export function usePayloadControl() {
  function checkPayloadAuth(controlSource?: ControlSource) {
    if (controlSource !== ControlSource.A) {
      // Message.error('Get Payload Control first')
      ElMessage.error('请先获取负载控制');
      return false;
    }
    return true;
  }

  function authPayload(sn='', payloadIndx='') {
    return postPayloadAuth(sn, {
      payload_index: payloadIndx,
    });
  }

  async function resetGimbal(sn='', data={}) {
    const { code } = await postPayloadCommands(sn, {
      cmd: PayloadCommandsEnum.GimbalReset,
      data: data,
    });
    if (code === 0) {
      ElMessage.success('万向节复位成功');
    }
  }

  async function switchCameraMode(sn='', data={}) {
    const { code } = await postPayloadCommands(sn, {
      cmd: PayloadCommandsEnum.CameraModeSwitch,
      data: data,
    });
    if (code === 0) {
      return true;
    } else {
      ElMessage.warning('拍照或者录像失败，请重试！！');
      return false;
    }
  }

  async function takeCameraPhoto(sn='', payloadIndx='', cameraType='') {
    const { code } = await postPayloadCommands(sn, {
      cmd: PayloadCommandsEnum.CameraPhotoTake,
      data: {
        payload_index: payloadIndx,
        camera_type: cameraType,
      },
    });
    if (code === 0) {
      ElMessage.success('拍照成功');
      return true;
    } else {
      ElMessage.warning('拍照失败，请重试！！');
      return false;
    }
  }

  async function startCameraRecording(sn='', payloadIndx='') {
    return postPayloadCommands(sn, {
      cmd: PayloadCommandsEnum.CameraRecordingStart,
      data: {
        payload_index: payloadIndx,
      },
    });
  }

  async function stopCameraRecording(sn='', payloadIndx='') {
    return postPayloadCommands(sn, {
      cmd: PayloadCommandsEnum.CameraRecordingStop,
      data: {
        payload_index: payloadIndx,
      },
    });
  }

  async function changeCameraFocalLength(sn='', data={},isZoom=false, strZoom='') {
    const { code } = await postPayloadCommands(sn, {
      cmd: PayloadCommandsEnum.CameraFocalLengthSet,
      data: data,
    });
    if (strZoom == '复原' || strZoom == '变焦复原') {
      // ElMessage.success('切换成功');
    } else if (isZoom) {
      ElMessage.success('放大成功');
    } else {
      ElMessage.success('缩小成功');
    }
  }

  async function cameraAim(sn='', data={}) {
    const { code } = await postPayloadCommands(sn, {
      cmd: PayloadCommandsEnum.CameraAim,
      data: data,
    });
    if (code === 0) {
      ElMessage.success('缩放目标成功');
    }
  }

  return {
    checkPayloadAuth,
    authPayload,
    resetGimbal,
    switchCameraMode,
    takeCameraPhoto,
    startCameraRecording,
    stopCameraRecording,
    changeCameraFocalLength,
    cameraAim,
  };
}

