// Production - The Idle Game: B2B Procurement Contracts Board import { getProduct } from '../data/products.js'; import { getClient } from '../data/contracts.js'; import { fmtCurrency, fmtNum, fmtTime } from '../core/formatters.js'; export function renderContractsBoard(container, state, onAction) { const contracts = state.activeContracts || []; let html = `

B2B Corporate Procurement Tenders

Supply high-priority commodity shipments to corporate clients for massive cash injections and corporate prestige.

Completed Tenders: ${state.stats.contractsCompleted || 0}
`; if (contracts.length === 0) { html += `

Awaiting New Tenders

Corporate procurement agents are preparing new commodity RFPs...

`; } for (const c of contracts) { const client = getClient(c.clientId); const product = getProduct(c.productId); const currentStock = state.products[c.productId]?.stock || 0; const canFulfill = currentStock >= c.targetAmount; const progressPct = Math.min(100, Math.floor((currentStock / c.targetAmount) * 100)); html += `

${client.name}

${client.badge}
${fmtTime(c.remainingSeconds)}

${c.title}

Required Commodity:
${product?.name}
${fmtNum(currentStock, 0)} / ${fmtNum(c.targetAmount, 0)} ${product?.unit || 'units'}
Contract Payout: ${fmtCurrency(c.rewardCash)}
Corporate Rep: +${c.rewardRep} Rep
`; } html += `
`; container.innerHTML = html; container.querySelectorAll('.btn-fulfill-contract').forEach(btn => { btn.onclick = () => onAction({ type: 'FULFILL_CONTRACT', uid: btn.dataset.uid }); }); }