'use strict';

const { Controller } = require('ee-core');
const Log = require('ee-core/log');
const Services = require('ee-core/services');
const path = require('path');
const fs = require('fs');
const {
  getDeviceConfigs,
  getDeviceConfigDetail,
  getDeviceConfigDetailQuery,
  removeConfig,
  saveDeviceConfig,
  resetDeviceConfig,
  updateSysConfigs,
  getSysConfig,
  getDeviceTabs,
  updateLeftRightConfig,
  updateTabName,
  syncSysConfigs,
  syncActions
} = require('../api/setting');

const errData = {
  msg :'请求失败，请联系管理员',
  code:999
}

/**
 * 设置控制器
 * @class
 */
class SettingController extends Controller {

  constructor(ctx) {
    super(ctx);
    this.configPath = path.join(__dirname, '..', 'config', 'app.config.json');
  }

  /**
   * 获取设备配置列表
   */
  async getDeviceConfigList(args) {
    try {
      const result = await getDeviceConfigs(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('获取设备配置列表失败:', error);
      return errData;
    }
  }

  /**
   * 获取二级 设备配置列表
   */
  async getDeviceTabs(args) {
    try {
      const result = await getDeviceTabs(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('获取设备配置二级列表失败:', error);
      return errData;
    }
  }

  /**
   * 获取设备配置详情
   * @param {Object} args - 配置ID
   */
  async getDeviceConfigDetail(args) {
    try {
      let fun = getDeviceConfigDetail
      if(!args.id) {
        fun =  getDeviceConfigDetailQuery
      }
      const result = await fun(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('获取设备配置详情失败:', error);
      return errData;
    }
  }

  /**
   * 删除设备配置
   * @param {Object} args - 配置ID
   */
  async removeDeviceConfig(args) {
    try {
      const result = await removeConfig(args)
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('删除设备配置失败:', error);
      return errData;
    }
  }

  /**
   * 保存设备配置
   * @param {Object} args - 配置内容
   */
  async saveDeviceConfig(args) {
    try {
      const result = await saveDeviceConfig(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('保存设备配置失败:', error);
      return errData;
    }
  }

  async updateLeftRightConfig(args) {
    try {
      const result = await updateLeftRightConfig(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('更新左右脚失败:', error);
      return errData;
    }
  }



  /**
   * 重置设备配置
   * @param {Object} args - 配置ID
   */
  async resetDeviceConfig(args) {
    try {
      const result = await resetDeviceConfig(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('重置设备配置失败:', error);
      return errData;
    }
  }
  async updateTabName(args) {
    try {
      const result = await updateTabName(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('重命名配置失败:', error);
      return errData;
    }
  }




  /**
   * 读取配置
   * @param {Object} args - 配置ID
   */
  async getSysConfig(args) {
    try {
      const result = await getSysConfig(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('重置设备配置失败:', error);
      return errData;
    }
  }


  /**
   * 保存配置
   * @param {Object} args - 配置ID
   */
  async updateSysConfigs(args) {
    try {
      const result = await updateSysConfigs(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('保存配置:', error);
      return errData;
    }
  }


  /**
   * 同步配置接口
   * @param {Object} token
   */
  async syncSysConfigs(args) {
    try {
      const result = await syncSysConfigs(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('同步配置接口:', error);
      return errData;
    }
  }


  /**
   * 同步左右脚配置
   * @param {Object} token
   */
  async syncActions(args) {
    try {
      const result = await syncActions(args);
      if(result.data)  return result.data
      return errData;
    } catch (error) {
      Log.error('同步左右脚配置:', error);
      return errData;
    }
  }
}

SettingController.toString = () => '[class SettingController]';
module.exports = SettingController;
