import {configData} from "@/api/system/config";

export async function getSysConfig(name) {
  const config = await configData({name});
  config.valueData = strToValue(config.type, config.value);
  return config;
}


export function strToValue(type: string, value: string): any {
  switch (type) {
    case 'json':
      return JSON.parse(value);
    case 'int':
    case 'number':
      return value ? parseInt(value) : 0;
    case 'switch':
      return value == '1'
    case 'checkbox':
      return value.split(",");
    case 'text':
    case 'textarea':
      return value ? value.toString() : '';
    case 'date':
    case 'datetime':
    case 'time':
      return value ? value.toString() : null;
    case 'date_range':
    case 'time_range':
    case 'datetime_range':
      return [null, null];
    default:
      return value
  }
}

export function strToOption(type: string, option: string): any {
  try {
    switch (type) {
      case 'json':
      case 'int':
      case 'switch':
      case 'text':
      case 'textarea':
      case 'checkbox':
      case 'radio':
      case 'tabs':
      default:
        if (option) {
          return JSON.parse(option);
        }
    }
  } catch (e) {
    console.error(e);
  }
  return {};
}

export function strToBind(type: string, bindStr: string): any {
  let bind: any;
  try {
    bind = bindStr ? JSON.parse(bindStr) : {};
  } catch (e) {
    bind = {}
  }
  try {
    switch (type) {
      case 'json':
      case 'int':
      case 'switch':
      case 'text':
      case 'textarea':
      case 'checkbox':
        return bind;
      case 'date':
        return {format: 'YYYY-MM-DD', ...bind}
      case 'datetime':
        return {format: 'YYYY-MM-DD HH:mm:ss', ...bind}
      case 'alert':
        return {type: "success", ...bind};
      default:
        return bind;
    }
  } catch (e) {
    console.error(e);
  }
  return {};
}

export function valueToStr(type: string, value: any) {
  switch (type) {
    case 'json':
      return value ? JSON.stringify(value) : "{}";
    case 'int':
    case 'number':
      return value.toString();
    case 'switch':
      return value ? '1' : '0'
    case 'checkbox':
      return value.join(",")
    case 'text':
    case 'textarea':
    case 'date':
    case 'datetime':
    case 'time':
      return value === null ? "" : value;
    case 'date_range':
    case 'time_range':
    case 'datetime_range':
      return value.join(",");
    default:
      return value === null ? "" : value;
  }
}
