/**
 * ITA (Israeli Tax Authority) e-invoice API client — ita-einvoice (wave-10 leaf 5).
 *
 * Implements the חשבונית ממוחשבת (computerized invoice) submission flow
 * required for B2G compliance from 2024.
 *
 * NOTE: Real ITA API requires valid credentials + business registration.
 * This implementation uses a documented mock/stub response.
 * Replace submitInvoice internals with real ITA API call when credentials available.
 *
 * ITA API endpoint (production): https://openapi.taxes.gov.il/shaam/tsandbox
 * Auth: Bearer token via API key registration with ITA.
 */

export interface ITAConfig {
  apiKey: string
  businessNumber: string // VAT registration number (ח.פ. / עוסק מורשה)
}

export interface ITAInvoicePayload {
  invoiceId: string
  invoiceNumber: string | null
  vatRegNumber: string // business VAT number
  amount: string // total with VAT (numeric string)
  vatAmount: string // VAT portion
  currency: string
  issueDate: string // ISO date
  customerName: string
  customerVatNumber?: string
  lines: Array<{
    description: string
    quantity: number
    unitPrice: string
    taxable: boolean
  }>
}

export interface ITASubmitResult {
  success: true
  ackNumber: string // ITA confirmation number
  submittedAt: string
}

export interface ITASubmitError {
  success: false
  error: string
  code?: string
}

/**
 * Format and submit an invoice to the ITA API.
 * Returns ackNumber on success.
 *
 * STUB: Returns mock acknowledgment. Replace with real ITA HTTP call.
 */
export async function submitInvoice(
  config: ITAConfig,
  invoice: ITAInvoicePayload,
): Promise<ITASubmitResult | ITASubmitError> {
  // Validate required fields
  if (!config.businessNumber || !config.apiKey) {
    return { success: false, error: 'ITA config missing businessNumber or apiKey' }
  }
  if (!invoice.invoiceNumber) {
    return { success: false, error: 'Invoice must have a tax invoice number before ITA submission' }
  }

  // STUB: Log submission details (real impl would POST to ITA API)
  console.info('[ita-einvoice] Submitting invoice to ITA (stub)', {
    invoiceId: invoice.invoiceId,
    invoiceNumber: invoice.invoiceNumber,
    vatRegNumber: invoice.vatRegNumber,
    amount: invoice.amount,
    currency: invoice.currency,
    issueDate: invoice.issueDate,
    // Never log apiKey
  })

  /*
   * Real ITA API call would be:
   *
   * const response = await fetch('https://openapi.taxes.gov.il/shaam/tsandbox/longtail/v1/documents', {
   *   method: 'POST',
   *   headers: {
   *     'Authorization': `Bearer ${config.apiKey}`,
   *     'Content-Type': 'application/json',
   *   },
   *   body: JSON.stringify({
   *     DocumentType: 305, // חשבונית מס
   *     VATNumber: invoice.vatRegNumber,
   *     DocumentNumber: invoice.invoiceNumber,
   *     DocumentDate: invoice.issueDate,
   *     TotalAmount: invoice.amount,
   *     VATAmount: invoice.vatAmount,
   *     Currency: invoice.currency,
   *     // ... etc
   *   }),
   * })
   * if (!response.ok) {
   *   const err = await response.json()
   *   return { success: false, error: err.message ?? 'ITA API error', code: String(response.status) }
   * }
   * const data = await response.json()
   * return { success: true, ackNumber: data.ConfirmationNumber, submittedAt: new Date().toISOString() }
   */

  // Mock successful response
  const mockAckNumber = `ITA-${Date.now()}-${invoice.invoiceNumber}`
  return {
    success: true,
    ackNumber: mockAckNumber,
    submittedAt: new Date().toISOString(),
  }
}
