// @requirements REQ-EU-ORDER-ACTION REQ-EU-GUARANTEE-LABEL REQ-PRODUCT-A11Y REQ-PRODUCT-MOBILE
import {normalizePaidOrderReview,formatPaidOrderMoney} from './paid-order-policy.js';
import type {PaidOrderReview,PaidOrderAmount,PaidOrderWording} from './paid-order-policy.js';
import {renderDurabilityGuaranteeLabel} from './guarantee-label.js';
export {normalizePaidOrderDefinition,normalizePaidOrderQuote,normalizePaidOrderReview,copyPaidOrderData,formatPaidOrderMoney,paidOrderEnglishWording,paidOrderHash,paidOrderMinor} from './paid-order-policy.js';
export type {PaidOrderDefinition,PaidOrderQuote,PaidOrderReview,PaidOrderAmount,PaidOrderItem,PaidOrderGuarantee,PaidOrderPayment,PaidOrderWording} from './paid-order-policy.js';
export interface PaidOrderRenderOptions {idPrefix:string;allowPreview?:boolean;headingLevel?:2|3}
const e=(v:string)=>v.replace(/[&<>"']/gu,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]!));
function amount(value:PaidOrderAmount,review:PaidOrderReview,w:PaidOrderWording):string {
if(value.kind==='fixed')return `${e(formatPaidOrderMoney(value.amountMinor,review.quote.pricing,review.definition.locale))}`;
return `
${e(w.calculated)}
${e(w.method)}
${e(value.method)}
${e(w.reason)}
${e(value.reason)}
`;
}
/** Static final-review information only. No order submission, terms acceptance, payment execution or confirmation is implied. */
export function renderPaidOrderReview(input:unknown,options:PaidOrderRenderOptions):string {
if(!options||!/^[a-z][a-z0-9-]{0,89}$/u.test(options.idPrefix)||options.headingLevel!==undefined&&![2,3].includes(options.headingLevel))throw Error('Use a unique lowercase paid-order prefix and heading level 2–3 (prefix at most 90 characters).');
const review=normalizePaidOrderReview(input,{allowPreview:options.allowPreview===true}),{definition:d,quote:q}=review,w=d.wording,id=options.idPrefix,level=options.headingLevel??2,h='h'+level,section='h'+(level+1),sub='h'+(level+2);
const items=q.lines.map((line,index)=>{
const item=d.items.find(item=>item.id===line.itemId)!,guarantee=item.guarantee;
return `<${sub}>${e(item.name)}${sub}>
${e(w.quantity)} ${line.quantity}
${item.characteristics.map(c=>`
${e(c)}
`).join('')}
${e(w.duration)}
${e(item.commitment.duration)}
${e(w.termination)}
${e(item.commitment.termination)}
${e(w.minimum)}
${e(item.commitment.minimum)}
${guarantee?.status==='label-provided'?renderDurabilityGuaranteeLabel(guarantee.label,{idPrefix:id+'-label-'+index,headingLevel:(level+3) as 5|6,allowPreview:options.allowPreview===true}):guarantee?`
${d.documents.length?``:''}`;
}
export {createPaidOrderAction,PaidOrderActionError} from './paid-order-action.js';
export type {PaidOrderRequest,PaidOrderOutcome,PaidOrderSnapshot,PaidOrderActionOptions,PaidOrderActionController} from './paid-order-action.js';
export {mountPaidOrderAction} from './paid-order-ui.js';