import Project from '../models/project';
import escapeStringRegexp from 'escape-string-regexp';
const startTag = '@fs-';
import { resolvePathToFile } from '../utils/filePath';
import {
  injectMediaUrls,
  resolvePathsForElementsWithAttribute,
  resolveScripts,
  resolveStyles } from '../utils/previewGeneration';
import jsdom, { serializeDocument } from 'jsdom';

export function serveProject(req, res) {
  Project.findById(req.params.project_id)
    .exec((err, project) => {
      // TODO this does not parse html
      const files = project.files;
      let htmlFile = files.find(file => file.name.match(/\.html$/i)).content;
      const filesToInject = files.filter(file => file.name.match(/\.(js|css)$/i));
      injectMediaUrls(filesToInject, files, req.params.project_id);

      jsdom.env(htmlFile, (err, window) => {
        const sketchDoc = window.document;

        const base = sketchDoc.createElement('base');
        const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
        base.href = `${fullUrl}/`;
        sketchDoc.head.appendChild(base);

        resolvePathsForElementsWithAttribute('src', sketchDoc, files);
        resolvePathsForElementsWithAttribute('href', sketchDoc, files);
        resolveScripts(sketchDoc, files);
        resolveStyles(sketchDoc, files);

        res.send(serializeDocument(sketchDoc));
      });
    });
}