// @requirements REQ-PRODUCT-EMBEDS REQ-EU-DEVICE REQ-PRODUCT-CONSENT-RUNTIME REQ-PRODUCT-SAFE-CONTENT
import {test} from 'node:test';
import assert from 'node:assert/strict';
import {JSDOM,ResourceLoader} from 'jsdom';
import {createConsent,createEmbedService,renderEmbedPlaceholder,toPublicConfig,validateSiteConfig} from 'notabenda';
import {compileLegalDocuments,createConsentNotice} from 'notabenda/content';
import {recordLegalRelease,registerConsentNotice,setActiveConsentNotice,recordConsentChoice,getConsentHead} from 'notabenda-cf';
import {createSyntheticStorage} from '../../notabenda-cf/examples/synthetic.mjs';
import {fixture} from './helpers.mjs';
const instant='2026-10-18T12:00:00.000Z';
const tick=()=>new Promise(resolve=>setImmediate(resolve));
const frame={kind:'iframe',src:'/fictional-frame',title:'Fictional map',description:'Optional map from the declared fictional provider.'};
const image={kind:'image',src:'https://media.example.test/image.png',title:'Fictional illustration',alt:'A fictional blue landscape',description:'Optional image from the same declared service.'};
async function setup(){
const config=await fixture({reviewed:true});
config.purposes=[config.purposes[0],{...structuredClone(config.purposes[0]),id:'media',name:'Embedded media'}];
config.services=[{id:'optional-media',name:'Fictional media',provider:'Fictional provider',location:'Test only',purposeIds:config.purposes.map(p=>p.id),resourceOrigins:['self','https://media.example.test']}];config.storage=[];
config.consent={purposes:config.purposes.map(p=>({id:p.id,scope:'one'})),services:[{id:'optional-media',scope:'one'}],grantLifetimeDays:1,refusalLifetimeDays:180,dismissalMinutes:30};
const values=new Map();let clock=Date.parse(instant);let notify;let timer;
const env={storage:{getItem:key=>values.get(key)??null,setItem:(key,value)=>values.set(key,value),removeItem:key=>values.delete(key)},now:()=>clock,schedule:callback=>{timer=callback;return ()=>{};},subscribe:(_key,callback)=>{notify=callback;return ()=>{};}};
const requests=[];class Loader extends ResourceLoader{fetch(url){requests.push(url);return null;}}
const dom=new JSDOM('',{url:'https://app.example.test/',resources:new Loader()});
return {config,env,values,dom,requests,get a(){return dom.window.document.querySelector('#a');},get b(){return dom.window.document.querySelector('#b');},get c(){return dom.window.document.querySelector('#c');},advance(){clock+=86400001;timer?.();},notify(){notify?.();}};
}
test('SSR placeholders are inert and escaped, and media declarations join public inventory and consent scope',async()=>{
const html=renderEmbedPlaceholder({title:'A