const path = require('path');
const fs = require('fs');
const fse = require('fs-extra');
const logger = require('../shared/logger');

const entryDir = path.resolve(__dirname, '../../devui');
const outputDir = path.resolve(__dirname, '../../build');

function generateIndexDts(buildDir) {
  const fileStr = `import { App } from 'vue';
  declare function install(app: App): void
  declare const _default: {
      install: typeof install;
      version: string;
  };
  export default _default;`;
  fse.outputFileSync(path.resolve(buildDir, 'index.d.ts'), fileStr, 'utf8');
}

exports.generateDts = () => {
  generateIndexDts(outputDir);

  const components = fs.readdirSync(entryDir).filter(name => {
    const componentDir = path.resolve(entryDir, name);
    const isDir = fs.lstatSync(componentDir).isDirectory();
    return isDir && fs.readdirSync(componentDir).includes('index.ts');
  });
  const srcDts = path.resolve(outputDir, 'index.d.ts');

  for(const name of components) {
    const destDts = path.resolve(outputDir, `${name}/index.d.ts`);
    fs.copyFile(srcDts, destDts, (err) => {
      if (err) {
        logger.error(`拷贝组件${name}的ts类型文件失败!`);
      }
    });
  }
};