import { api } from '../../../services/api'
import { TransactionLogger } from './TransactionLogger'
import { getPaymentMode } from '../lib/paymentMode'

export class OrderManager {
  static async validateOrder(orderId: string, amount: number): Promise<boolean> {
    const mode = getPaymentMode()

    try {
      // Basic validation
      if (!orderId || amount <= 0) {
        TransactionLogger.log(mode, 'order.validation.failed', {
          orderId,
          amount,
          reason: 'invalid_parameters'
        })
        return false
      }

      // Additional business rules can be added here
      // For now, just check if order exists in our system
      const orderDetails = await this.getOrderDetails(orderId)

      if (!orderDetails) {
        TransactionLogger.log(mode, 'order.validation.failed', {
          orderId,
          reason: 'order_not_found'
        })
        return false
      }

      // Check amount matches
      if (orderDetails.amount !== amount) {
        TransactionLogger.log(mode, 'order.validation.failed', {
          orderId,
          expectedAmount: orderDetails.amount,
          providedAmount: amount,
          reason: 'amount_mismatch'
        })
        return false
      }

      TransactionLogger.log(mode, 'order.validation.success', { orderId, amount })
      return true
    } catch (error) {
      TransactionLogger.logPaymentError(mode, orderId, error)
      return false
    }
  }

  static async getOrderDetails(orderId: string) {
    try {
      // This would typically call your ERP or order management system
      // For now, return mock data or call existing API
      const response = await api.get(`/orders/${orderId}`)
      return response.data
    } catch (error) {
      // If API doesn't exist yet, return null (will be implemented in Epic 5)
      console.warn(`Order details API not available for ${orderId}:`, error instanceof Error ? error.message : String(error))
      return null
    }
  }

  static async updateOrderStatus(orderId: string, status: string, source: string) {
    const mode = getPaymentMode()

    try {
      // This would update your ERP system to unfreeze inventory, etc.
      // For now, just log the update
      TransactionLogger.log(mode, 'order.status.updated', {
        orderId,
        status,
        source,
        timestamp: new Date().toISOString()
      })

      // TODO: Implement actual ERP integration in Epic 5
      // await api.post('/erp/orders/update-status', { orderId, status, source })

    } catch (error) {
      TransactionLogger.logPaymentError(mode, orderId, error)
      throw error
    }
  }
}