/**
 * @license
 * Copyright Google LLC All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.dev/license
 */
/* tslint:disable:no-console  */
import {APP_BASE_HREF} from '@angular/common';
import {renderModule} from '@angular/platform-server';
import express from 'express';
import AppServerModule from './src/main.server';
import {fileURLToPath} from 'node:url';
import {dirname, join, resolve} from 'node:path';
import {readFileSync} from 'node:fs';
import './prerender';

const app = express();
const serverDistFolder = dirname(fileURLToPath(import.meta.url));
const browserDistFolder = resolve(serverDistFolder, '../browser');
const indexHtml = readFileSync(join(browserDistFolder, 'index.csr.html'), 'utf-8');

// Serve static files from /browser
app.use(
  express.static(browserDistFolder, {
    maxAge: '1y',
  }),
);

// Mock API
app.get('/api', (req, res) => {
  res.json({data: 'API 1 response'});
});

app.get('/api-2', (req, res) => {
  res.json({data: 'API 2 response'});
});

// All regular routes use the Universal engine
app.use((req, res) => {
  const {protocol, originalUrl, baseUrl, headers} = req;

  renderModule(AppServerModule, {
    document: indexHtml,
    allowedHosts: ['localhost'],
    url: `${protocol}://${headers.host}${originalUrl}`,
    extraProviders: [{provide: APP_BASE_HREF, useValue: baseUrl}],
  }).then((response: string) => {
    res.send(response);
  });
});

app.listen(4206, () => {
  console.log('Server listening on port 4206!');
});
