import { Table } from "../../classes/Table";
import { IConfig } from "../../../interfaces/config";
import * as path from "path";
import * as fse from "fs-extra";
import { CONSTANT } from "../../../utils/constants";
import utils from "../../../utils/general-utils";
import * as routesWriter from "./write-route-methods";

export function generate(tables: Array<Table>, config: IConfig) {
    let controllerPath = config.ORM_GENERATE.path.controllers;
    let servicesPath = config.ORM_GENERATE.path.services;
    let pathSplit = servicesPath.split("/");

    tables.forEach((x) => {
        const upperCaseTableName = utils.capitalizeFirstLetter(x.tableName);
        const pluralizedTableName = utils.pluralize(upperCaseTableName);
        let sFile = "";

        if (controllerPath && fse.pathExistsSync(`${controllerPath}/${upperCaseTableName}/${upperCaseTableName}.routes.ts`)) {
            console.log(upperCaseTableName + ".routes.ts encountered. Skipping... no overwrite occurred");
        } else {
 
            console.log("writing: ", `${controllerPath}/${upperCaseTableName} routes`);
            sFile = `import { Router } from "express" \n` +
                    `import ${upperCaseTableName}Controller from "./${upperCaseTableName}.controller"\n` +
                    `export function ${upperCaseTableName}Routes() { \n ` +
                    `\t${routesWriter.get(x, config)}` +
                    `\t\t/*** end generated routes ***/\n` +
                    `\n} \n\n`;

            fse.outputFileSync(`${controllerPath}/${upperCaseTableName}/${upperCaseTableName}.routes.ts`, sFile, "utf8");
    
            sFile = "";
        } 
    });
}

