// lib/features/booking/services/booking_service.dart

import '../../../core/api/api_client.dart';
import '../../../core/api/api_endpoints.dart';
import '../models/booking_models.dart';

class BookingService {
  final ApiClient _api = ApiClient();

  /// Fetch available ticket types for an event.
  Future<List<TicketMetaModel>> getTicketMeta(int eventId) async {
    final res = await _api.post(
      ApiEndpoints.ticketMetaList,
      body: {'event_id': eventId},
    );
    final rawList = res['ticket_metas'] ?? res['tickets'] ?? res['data'] ?? [];
    if (rawList is List) {
      return rawList
          .map((e) => TicketMetaModel.fromJson(Map<String, dynamic>.from(e as Map)))
          .toList();
    }
    return [];
  }

  /// Add item to cart.
  Future<Map<String, dynamic>> addToCart({
    required int ticketMetaId,
    required int quantity,
  }) async {
    return await _api.post(
      ApiEndpoints.cartAdd,
      body: {'ticket_meta_id': ticketMetaId, 'quantity': quantity},
    );
  }

  /// Process checkout — creates booking + returns order ID for payment.
  Future<Map<String, dynamic>> processCheckout({
    required int eventId,
    required List<Map<String, dynamic>> tickets,
    required Map<String, dynamic> shippingDetails,
    String? couponCode,
  }) async {
    return await _api.post(
      ApiEndpoints.checkout,
      body: {
        'event_id': eventId,
        'tickets': tickets,
        'shipping': shippingDetails,
        if (couponCode != null) 'coupon_code': couponCode,
      },
    );
  }
}
