/**
 * Copyright (c) 2023 - present TinyEngine Authors.
 * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd.
 *
 * Use of this source code is governed by an MIT-style license.
 *
 * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
 * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
 * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
 *
 */

/* eslint-disable @typescript-eslint/no-require-imports */
const fs = require('fs-extra')
const path = require('path')

const componentsName = 'carousel-item'
const propertiePath = path.join(__dirname, `./properties/${componentsName}.json`)
const schemaPath = path.join(__dirname, `./schema/${componentsName}.json`)
const data = fs.readJSONSync(propertiePath)
const properties = data.schema.properties || {}

const results = {
  properties: [
    {
      label: {
        zh_CN: '基础信息'
      },
      description: {
        zh_CN: '基础信息'
      },
      collapse: {
        number: 6,
        text: {
          zh_CN: '显示更多'
        }
      },
      content: []
    }
  ],
  events: {}
}

const widgetMap: Record<string, string> = {
  object: 'CodeConfigurator',
  array: 'CodeConfigurator',
  enum: 'SelectConfigurator',
  string: 'InputConfigurator',
  number: 'NumberConfigurator',
  boolean: 'SwitchConfigurator'
}

function getWidgetCompoent(value: any) {
  let componentType = ''
  if (Array.isArray(value.type)) {
    if (value.type.includes('object') || value.type.includes('array')) {
      componentType = 'object'
    } else if (value.type.includes('sting')) {
      componentType = 'string'
    } else {
      componentType = value.type[0]
    }
  } else {
    componentType = value.type
  }

  const props: any = {}
  if (value.enum) {
    props.options = []
    value.enum.forEach((item: any, index: string | number) => {
      props.options.push({
        label: value.enumNames[index],
        value: item
      })
    })
  }
  return {
    component: widgetMap[componentType],
    props: props
  }
}
Object.entries(properties).forEach(([key, value]) => {
  if (!key.includes('#')) {
    const obj = {
      property: key.replace(/\$/g, ''),
      label: {
        text: {
          zh_CN: value.title || ''
        }
      },
      required: true,
      readOnly: false,
      disabled: false,
      cols: 12,
      widget: getWidgetCompoent(value),
      description: {
        zh_CN: ''
      }
    }
    results.properties[0].content.push(obj)
  }
})

fs.writeJSONSync(schemaPath, results)