import { existsSync, readFileSync, writeFileSync } from 'node:fs';
import { resolve } from 'node:path';

const root = resolve(import.meta.dirname, '..');

const desktopHtml = readFileSync(resolve(root, 'dist/desktop/index.html'), 'utf8');

const mobileHtmlPath = resolve(root, 'dist/mobile/index.mobile.html');
const mobileHtmlFallbackPath = resolve(root, 'dist/mobile/index.html');
const hasMobileBuild = existsSync(mobileHtmlPath) || existsSync(mobileHtmlFallbackPath);

let output: string;

if (hasMobileBuild) {
  // Docker: mobile build exists locally, inline the template
  const mobileHtml = readFileSync(
    existsSync(mobileHtmlPath) ? mobileHtmlPath : mobileHtmlFallbackPath,
    'utf8',
  );

  output = `// Auto-generated by scripts/generateSpaTemplates.mts after vite build
// Do not edit manually

export const desktopHtmlTemplate = ${JSON.stringify(desktopHtml)};

export const mobileHtmlTemplate = ${JSON.stringify(mobileHtml)};
`;
} else {
  // Vercel: no mobile build, import from pre-committed source file
  output = `// Auto-generated by scripts/generateSpaTemplates.mts after vite build
// Do not edit manually

import { mobileHtmlTemplate } from './mobileHtmlTemplate.source';

export const desktopHtmlTemplate = ${JSON.stringify(desktopHtml)};

export { mobileHtmlTemplate };
`;
}

writeFileSync(
  resolve(root, 'src/app/spa/[variants]/[[...path]]/spaHtmlTemplates.ts'),
  output,
  'utf8',
);

console.log(`Generated spaHtmlTemplates.ts (mobile from ${hasMobileBuild ? 'build' : 'source'})`);