import type { UseCaseSpec } from '../../../fixtures/fixture-spec.js';
import { CountryCode, Currency } from '../../../shared/enums.js';
import { makeUUID } from '../../helpers/deterministic-uuid.js';

/**
 * Monthly Expense Use-Case: Foreign Currency Transaction
 *
 * Demonstrates a US-based supplier invoice paid via bank transfer with
 * exchange rate conversion from USD to ILS. This use-case validates:
 * - Foreign currency transaction handling
 * - Exchange rate application
 * - Cross-border payment processing
 * - Ledger generation with currency conversion
 */
export const monthlyExpenseForeignCurrency: UseCaseSpec = {
  id: 'monthly-expense-foreign-currency',
  name: 'Monthly Expense (Foreign Currency)',
  description:
    'US-based supplier invoice paid via bank transfer with exchange rate conversion from USD to ILS. Validates foreign currency handling and ledger generation.',
  category: 'expenses',
  fixtures: {
    businesses: [
      {
        id: makeUUID('business', 'us-supplier-acme-llc'),
        name: 'Acme Consulting LLC',
        country: CountryCode['United States of America (the)'],
        canSettleWithReceipt: false,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
    ],
    taxCategories: [
      {
        id: makeUUID('tax-category', 'consulting-expenses'),
        name: 'Consulting Expenses',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
    ],
    financialAccounts: [
      {
        id: makeUUID('financial-account', 'bank-usd-account'),
        accountNumber: '123-456-7890',
        type: 'BANK_ACCOUNT',
        currency: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        taxCategoryMappings: [
          {
            taxCategoryId: makeUUID('tax-category', 'consulting-expenses'),
            currency: Currency.Usd,
            ownerId: '{{ADMIN_BUSINESS_ID}}',
          },
        ],
      },
    ],
    charges: [
      {
        id: makeUUID('charge', 'consulting-invoice-2024-01'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'January consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-02'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'February consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-03'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'March consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-04'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'April consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-05'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'May consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-06'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'June consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-07'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'July consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-08'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'August consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-09'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'September consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-10'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'October consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-11'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'November consulting services',
      },
      {
        id: makeUUID('charge', 'consulting-invoice-2024-12'),
        ownerId: '{{ADMIN_BUSINESS_ID}}',
        userDescription: 'December consulting services',
      },
    ],
    transactions: [
      {
        id: makeUUID('transaction', 'consulting-payment-usd-01'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-01'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-01-15',
        debitDate: '2024-01-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-02'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-02'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-02-15',
        debitDate: '2024-02-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-03'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-03'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-03-15',
        debitDate: '2024-03-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-04'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-04'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-04-15',
        debitDate: '2024-04-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-05'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-05'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-05-15',
        debitDate: '2024-05-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-06'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-06'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-06-15',
        debitDate: '2024-06-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-07'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-07'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-07-15',
        debitDate: '2024-07-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-08'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-08'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-08-15',
        debitDate: '2024-08-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-09'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-09'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-09-15',
        debitDate: '2024-09-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-10'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-10'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-10-15',
        debitDate: '2024-10-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-11'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-11'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-11-15',
        debitDate: '2024-11-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('transaction', 'consulting-payment-usd-12'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-12'),
        businessId: makeUUID('business', 'us-supplier-acme-llc'),
        amount: '-500.00',
        currency: Currency.Usd,
        eventDate: '2024-12-15',
        debitDate: '2024-12-15',
        accountNumber: '123-456-7890',
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
    ],
    documents: [
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-01-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-01'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-01-15',
        type: 'INVOICE',
        date: '2024-01-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-02-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-02'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-02-15',
        type: 'INVOICE',
        date: '2024-02-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-03-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-03'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-03-15',
        type: 'INVOICE',
        date: '2024-03-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-04-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-04'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-04-15',
        type: 'INVOICE',
        date: '2024-04-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-05-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-05'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-05-15',
        type: 'INVOICE',
        date: '2024-05-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-06-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-06'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-06-15',
        type: 'INVOICE',
        date: '2024-06-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-07-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-07'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-07-15',
        type: 'INVOICE',
        date: '2024-07-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-08-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-08'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-08-15',
        type: 'INVOICE',
        date: '2024-08-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-09-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-09'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-09-15',
        type: 'INVOICE',
        date: '2024-09-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-10-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-10'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-10-15',
        type: 'INVOICE',
        date: '2024-10-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-11-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-11'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-11-15',
        type: 'INVOICE',
        date: '2024-11-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
      {
        id: makeUUID('document', 'consulting-invoice-inv-2024-12-15'),
        chargeId: makeUUID('charge', 'consulting-invoice-2024-12'),
        creditorId: makeUUID('business', 'us-supplier-acme-llc'),
        debtorId: '{{ADMIN_BUSINESS_ID}}',
        serialNumber: 'INV-2024-12-15',
        type: 'INVOICE',
        date: '2024-12-01',
        totalAmount: '500.00',
        currencyCode: Currency.Usd,
        ownerId: '{{ADMIN_BUSINESS_ID}}',
      },
    ],
  },
  metadata: {
    author: 'demo-team',
    createdAt: '2024-01-01',
    updatedAt: '2024-01-01',
  },
  expectations: {
    ledgerRecordCount: 24,
  },
};
