import 'dart:convert';

class PaymentRequestModel {
  final String? orderId;
  final String? paymentMethodId;
  final int? amount;
  final String? transactionId;
  final int? splitNumber;
  final int? splitTotal;
  final String? splitDescription;
  final List<PaymentOrderItemModel>? paymentOrderItems;

  PaymentRequestModel({
    this.orderId,
    this.paymentMethodId,
    this.amount,
    this.transactionId,
    this.splitNumber,
    this.splitTotal,
    this.splitDescription,
    this.paymentOrderItems,
  });

  factory PaymentRequestModel.fromJson(String str) =>
      PaymentRequestModel.fromMap(json.decode(str));

  String toJson() => json.encode(toMap());

  factory PaymentRequestModel.fromMap(Map<String, dynamic> json) =>
      PaymentRequestModel(
        orderId: json["order_id"],
        paymentMethodId: json["payment_method_id"],
        amount: json["amount"]?.toDouble(),
        transactionId: json["transaction_id"],
        splitNumber: json["split_number"],
        splitTotal: json["split_total"],
        splitDescription: json["split_description"],
        paymentOrderItems: json["payment_order_items"] == null
            ? []
            : List<PaymentOrderItemModel>.from(json["payment_order_items"]
                .map((x) => PaymentOrderItemModel.fromMap(x))),
      );

  Map<String, dynamic> toMap() => {
        "order_id": orderId,
        "payment_method_id": paymentMethodId,
        "amount": amount,
        "transaction_id": transactionId,
        "split_number": splitNumber,
        "split_total": splitTotal,
        "split_description": splitDescription,
        "payment_order_items": paymentOrderItems == null
            ? []
            : List<dynamic>.from(paymentOrderItems!.map((x) => x.toMap())),
      };
}

class PaymentOrderItemModel {
  final String? orderItemId;
  final int? amount;

  PaymentOrderItemModel({
    this.orderItemId,
    this.amount,
  });

  factory PaymentOrderItemModel.fromJson(String str) =>
      PaymentOrderItemModel.fromMap(json.decode(str));

  factory PaymentOrderItemModel.fromMap(Map<String, dynamic> json) =>
      PaymentOrderItemModel(
        orderItemId: json["order_item_id"],
        amount: json["amount"]?.toDouble(),
      );

  Map<String, dynamic> toMap() => {
        "order_item_id": orderItemId,
        "amount": amount,
      };
}

class PaymentSplitBillRequest {
  final String orderId;
  final String paymentMethodId;
  final String customerId;
  final String type; // e.g., "AMOUNT" or "ITEM"
  final int amount;
  final List<SplitItem> items;

  PaymentSplitBillRequest({
    required this.orderId,
    required this.paymentMethodId,
    required this.customerId,
    required this.type,
    required this.amount,
    required this.items,
  });

  Map<String, dynamic> toMap() {
    Map<String, dynamic> data = {
      'order_id': orderId,
      'payment_method_id': paymentMethodId,
      'customer_id': customerId,
      'type': type,
    };

    if (type == "AMOUNT") {
      data['amount'] = amount;
    }

    if (type == "ITEM") {
      data['items'] = items.map((e) => e.toJson()).toList();
    }

    return data;
  }
}

class SplitItem {
  final String orderItemId;
  final int quantity;

  SplitItem({
    required this.orderItemId,
    required this.quantity,
  });

  Map<String, dynamic> toJson() {
    return {
      'order_item_id': orderItemId,
      'quantity': quantity,
    };
  }
}
