import {
  isSettlementMarketplace,
  recordSettlementExport,
  settlementExportLogAvailable,
  type PeriodExportInput
} from '../../../utils/settlementExportLog'
import { userNameOf } from '../../../utils/amazonAds/routeShared'

// Records one produced lexoffice CSV file in the per-period export log.
//   POST { marketplace, orderSourceId, variant: 'combined'|'payouts'|'positions',
//          fileName?, rowCount?, periods: [{ periodId, periodLabel?, payoutDate?,
//          amount?, currency?, positions, complete, rowCount?, payout, net? }] }
//   → { status, periods: { [periodId]: PeriodExportRecord } }
// Called by the settlement pages right after the browser received the file.
const VARIANTS = new Set(['combined', 'payouts', 'positions'])

export default defineEventHandler(async (event) => {
  await getTokenHelper(event)
  const body = await readBody(event)
  const marketplace = String(body?.marketplace || '')
  const orderSourceId = Number(body?.orderSourceId || 0)
  const variant = String(body?.variant || '')
  if (!isSettlementMarketplace(marketplace) || !orderSourceId || !VARIANTS.has(variant)) {
    return { status: 400, message: 'marketplace, orderSourceId and variant are required' }
  }
  const periods: PeriodExportInput[] = (Array.isArray(body?.periods) ? body.periods : [])
    .filter((p: any) => p && p.periodId)
    .map((p: any) => ({
      periodId: String(p.periodId),
      periodLabel: p.periodLabel ? String(p.periodLabel) : undefined,
      payoutDate: p.payoutDate ? String(p.payoutDate) : undefined,
      amount: p.amount == null || p.amount === '' ? null : Number(p.amount),
      currency: p.currency ? String(p.currency) : undefined,
      positions: !!p.positions,
      complete: !!p.complete,
      rowCount: Number(p.rowCount || 0),
      payout: !!p.payout,
      net: p.net == null || p.net === '' ? null : Number(p.net)
    }))
  if (!periods.length) {
    return { status: 400, message: 'No periods given' }
  }
  if (!settlementExportLogAvailable()) {
    return { status: 503, message: 'Export-Protokoll nicht verfügbar (data/settlement-exports.db konnte nicht geöffnet werden)' }
  }
  const updated = recordSettlementExport({
    marketplace,
    orderSourceId,
    variant: variant as any,
    fileName: body?.fileName ? String(body.fileName) : null,
    rowCount: Number(body?.rowCount || 0),
    user: userNameOf(event),
    periods
  })
  return { status: 200, periods: updated }
})
