import {localizationFiles} from '../localization/build.mjs';
import {paidOrderFiles} from '../orders/build.mjs';
import {catalogReleaseExample} from '../catalog-releases/build.mjs';
// @requirements REQ-PRODUCT-BUNDLE-BUDGET
import {serviceDirectoryFiles} from '../services/build.mjs';
import {contractActionFiles} from '../contract-actions/build.mjs';
import {googleBasicFiles} from '../google-basic/build.mjs';
import {formPermissionFiles} from '../form-permissions/build.mjs';
import {rightsFiles} from '../rights/build.mjs';
import {styleExamplePages} from './example-design.mjs';
import {discoveryFiles} from '../discovery/build.mjs';
import {scopeGuardFiles} from '../scope-guards/build.mjs';
import {repeatPromptFiles} from '../repeat-prompts/build.mjs';
import { readFile } from 'node:fs/promises';
import { resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import { compileLegalDocuments,createRetainedReleaseFiles } from 'notabenda/content';
import { renderLegalLinks } from 'notabenda';
import { writeBuildFiles } from '../../packages/notabenda/dist/files.js';
import { choiceFiles } from './choices-build.mjs';
import { agreementFiles } from './terms-build.mjs';
import { authoringExample } from '../authoring/build.mjs';
import { reactFiles } from '../react/build.mjs';
import { astroFiles } from '../astro/build.mjs';
import { embedFiles } from '../embeds/build.mjs';
import {retainedReleaseExample} from '../releases/build.mjs';
import { processingFiles } from '../processing-choices/build.mjs';
import {collectionFiles} from '../collection/build.mjs';
import {indirectCollectionFiles} from '../indirect-collection/build.mjs';
import {guaranteeFiles} from '../guarantees/build.mjs';
import {setupFiles} from '../setup/build.mjs';
import {storageExceptionFiles} from '../storage-exceptions/build.mjs';
import {storageCleanupFiles} from '../storage-cleanup/build.mjs';
import { signalFiles } from '../privacy-signals/build.mjs';
export async function exampleFiles() {
const config = JSON.parse(await readFile(new URL('./notabenda.config.json', import.meta.url), 'utf8'));
const css = await readFile(new URL('../../packages/notabenda/dist/styles.css', import.meta.url), 'utf8');
const consentCss = await readFile(new URL('../../packages/notabenda/dist/consent.css', import.meta.url), 'utf8');
const darkTheme = '\n@layer example { .nb-page { color-scheme: dark; --nb-page-bg: #10121d; --nb-surface: #171b2b; --nb-soft: #202539; --nb-text: #eef0fc; --nb-muted: #adb5ce; --nb-line: #343b56; --nb-accent: #bdc4ff; --nb-action-bg: #c1c7ff; --nb-action-text: #191d35; --nb-focus: #a5acff; --nb-font: ui-sans-serif, system-ui, sans-serif; --nb-document-width: 46rem; } }\n';
const logo = await readFile(new URL('../../docs/assets/logo.svg', import.meta.url), 'utf8');
const mark = await readFile(new URL('../../docs/assets/mark.svg', import.meta.url), 'utf8');
const build = compileLegalDocuments(config, { mode: 'preview' });
const dark = structuredClone(config);
for (const doc of Object.values(dark.documents)) doc.route = '/dark' + doc.route;
const darkBuild = compileLegalDocuments(dark, { mode: 'preview', stylesheetUrl: '/assets/dark.css' });
const darkFiles = Object.fromEntries(Object.entries(darkBuild.files).filter(([file]) => file.startsWith('dark/') || file.startsWith('artifacts/')));
const index = `
Juniper Notes · Legal pages exampleNotabenda · Static example
Notabenda examples
Legal pages that feel like part of your site. Built from one configuration, rendered as ordinary HTML, with no scripts or external assets.
Explore the documents
${renderLegalLinks(config)}`;
const previous=JSON.parse(await readFile(new URL('../releases/previous-preview-releases.json',import.meta.url),'utf8'));
const retained={};for(const [siteId,artifacts] of Map.groupBy(previous,artifact=>artifact.manifest.siteId))Object.assign(retained,createRetainedReleaseFiles(artifacts,{siteId,mode:'preview'}));
return styleExamplePages({
...retained,...catalogReleaseExample(config).files,...await indirectCollectionFiles(config),...await guaranteeFiles(),...await paidOrderFiles(),
...build.files, ...darkFiles, ...await serviceDirectoryFiles(config), ...(await authoringExample()).files, ...await choiceFiles(config), ...await agreementFiles(config), ...await reactFiles(config), ...await astroFiles(), ...await embedFiles(config), ...await signalFiles(config), ...await storageCleanupFiles(config), ...await storageExceptionFiles(config), ...await localizationFiles(config), ...await setupFiles(), ...await collectionFiles(config), ...await discoveryFiles(config), ...await repeatPromptFiles(config), ...await scopeGuardFiles(config), ...await rightsFiles(config), ...await processingFiles(config), ...await formPermissionFiles(config), ...await googleBasicFiles(config),...await contractActionFiles(config), ...(await retainedReleaseExample()).files, 'index.html': index.replace('', '').replace('', ''), 'assets/notabenda.css': css,
'assets/logo.svg': logo, 'assets/mark.svg': mark,
'brand/index.html': 'Notabenda · BrandNotabenda · Brand assets

Brand assets
An original folded-note mark and a simple wordmark. Scalable SVGs, no external fonts or assets, Apache-2.0.
Explore the legal pages · Evidence workspace · Document history
',
'assets/dark.css': css + darkTheme,
'assets/consent.css':consentCss,
'assets/consent-dark.css':consentCss + darkTheme,
});
}
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
await writeBuildFiles(new URL('./dist', import.meta.url).pathname, await exampleFiles());
console.log('Built fictional light/dark legal pages in examples/static/dist.');
}