import { Router } from 'express';
import fs from 'fs';
import mime from 'mime-types';
import path from 'path';

import { RouterBroker } from '../abstract/abstract.router';

export class ViewsRouter extends RouterBroker {
  constructor() {
    super();
    const baseDir = __dirname.includes('dist') ? '../../../../' : '../../../';
    const indexPath = path.join(__dirname, baseDir, 'Extras/evolution-manager', 'index.html');
    const index = fs.readFileSync(indexPath);

    this.router.get('/*', (req, res) => {
      try {
        const pathname = req.url.split('?')[0];

        // verify if url is a file in dist folder
        if (pathname === '/') throw {};
        const filePath = path.join(__dirname, baseDir, 'Extras/evolution-manager', pathname);

        if (fs.existsSync(filePath)) {
          const contentType = mime.lookup(filePath) || 'text/plain';
          res.set('Content-Type', contentType);
          res.end(fs.readFileSync(filePath));
          return;
        }

        res.set('Content-Type', 'text/html');
        res.send(index);
      } catch {
        res.set('Content-Type', 'text/html');
        res.send(index);
      }
    });
  }

  public readonly router = Router();
}
