#!/usr/bin/env node

const fs = require('fs');
const path = require('path');

const folderName = process.argv[2];
const appName = process.argv[3];
// const componentType = process.argv[4];
// const maps = process.argv[5];

// Verifica se il nome della cartella è stato fornito
if (!folderName) {
  console.error('Errore: Devi specificare un nome per la cartella.');
  process.exit(1);
}

// Creazione della cartella
let folderPath = path.join(process.cwd(), "./src/widgets/", folderName);
let useDefaultCss = "";
let useDefaultLogo = "";
// Verifico se ho specificato anche il nome dell'applicazione
if (appName) {
  folderPath = path.join(process.cwd(), `./src/applications/${appName.toLowerCase()}/maps/`, folderName);
}
if (appName && folderName && appName.toLowerCase() === folderName.toLowerCase()) {
  folderPath = path.join(process.cwd(), `./src/applications/${appName.toLowerCase()}`);
  useDefaultCss = path.join(__dirname, `../applications/default/DefaultApp.css`);
  useDefaultLogo = path.join(__dirname, `../../public/defaultLogo.png`);
}

// vedo se sto lanciando dentro al pacchetto NPM o da un progetto che lo include
let prefixLib = "@widgets";
// if (!folderPath.includes("/wreactwidgets/")) {
//   prefixLib = "wreactwidgets/src/widgets";
// }

fs.mkdirSync(folderPath, { recursive: true });

// Creazione di un file .tsx
const tsxFilePath = path.join(folderPath, `${folderName}.tsx`);
const tsxContent = `// ${folderName}.tsx 
import React, { Component } from 'react';
import I${folderName}State from './I${folderName}State'; 
import I${folderName}Props from './I${folderName}Props';
import WDWidgetBase from '${prefixLib}/WDWidgetBase/WDWidgetBase';
import "./${folderName}.css";
import defaultValue from "./${folderName}State.json";

export default class ${folderName} extends WDWidgetBase<I${folderName}Props, I${folderName}State>{
  
  constructor(props: any) {
    super(props, defaultValue);
    if (this.manualInitState) {
      this.state = {
        ...this.state
        // Aggiungere qui manualmente la valorizzazione dello stato in base ai valori di props
      }
    }
  }

  renderContent() {
       return(
         <div className="${folderName}">
         </div>
       );
     }
}
`

if(!fs.existsSync(tsxFilePath))fs.writeFileSync(tsxFilePath, tsxContent);

// Creazione di un file .css
const cssFilePath = path.join(folderPath, `${folderName}.css`);
const defaultLogoFilePath = path.join(process.cwd(), "./public/defaultLogo.png");
if (useDefaultCss !== "") {
  if(!fs.existsSync(cssFilePath)) {
    fs.copyFileSync(useDefaultCss, cssFilePath);
  }
  if(!fs.existsSync(defaultLogoFilePath)) {
    fs.copyFileSync(useDefaultLogo, defaultLogoFilePath);
  }
} else {
  if(!fs.existsSync(cssFilePath))fs.writeFileSync(cssFilePath, '/* File CSS */');
}

// Creazione di un file .json per lo stato
const jsonFilePath = path.join(folderPath, `${folderName}State.json`);
if(!fs.existsSync(jsonFilePath))fs.writeFileSync(jsonFilePath, '{ }');

// Creazione di un file .json per le properties
const propsFilePath = path.join(folderPath, `I${folderName}Props.ts`);
const propsContents = `
import IWDWidgetBaseProps from '${prefixLib}/WDWidgetBase/IWDWidgetBaseProps';

export default interface I${folderName}Props extends IWDWidgetBaseProps {

};
`

if(!fs.existsSync(propsFilePath))fs.writeFileSync(propsFilePath, propsContents);

console.log(`Cartella e file creati con successo in ${folderPath}`);

// npm run nc <nome_componente> <nome_app | vuoto>
