import 'package:dio/dio.dart';
import 'package:payment_plugin/domain/models/payment_method.dart';
import 'package:payment_plugin/data/remote/models/stored_payment_methods_response.dart';
import 'package:payment_plugin/utils/json.dart';
import 'package:retrofit/retrofit.dart';

part '../../../_generated/data/remote/api/api_client.g.dart';

@RestApi()
abstract class ApiClient {
  factory ApiClient(Dio dio) = _ApiClient;

  @GET("/Payment/v1/stored-payment-methods")
  Future<StoredPaymentsResponse> getPaymentMethods();

  @POST("/Payment/v1/CreateAdyenSessionForBooking")
  Future<dynamic> createAdyenSession(@Body() String data);

  @POST("/Payment/v1/CreateAdyenSessionForConcierge")
  Future<dynamic> createAdyenSessionForConcierge(@Body() Json data);

  @POST("/Payment/v1/CreatePaymentSessionForAddingCards")
  Future<dynamic> createAdyenSessionForCards(@Body() String data);

  @GET("/Payment/v1/list-available-payment-methods")
  Future<dynamic> listAvailablePaymentMethods();

  @POST("/Payment/v1/stored-payment-methods")
  Future<dynamic> storePaymentMethod(@Body() PaymentMethod storedPaymentMethod);

  @DELETE("/Payment/v1/stored-payment-methods/{cardId}")
  Future<dynamic> removePaymentMethod(@Path("cardId") String cardId);

  @POST("https://checkout-test.adyen.com/v71/payments")
  Future<dynamic> submitPayment(
    @Query("data") Map<String, dynamic> data,
    @Header("X-API-KEY") String apiKey,
    @Header("Content-Type") String contentType,
  );

  @POST("/Payment/v1/post-payments-details")
  Future<dynamic> postPaymentsDetails(
    @Body() Map<String, dynamic> data,
    @Header("Content-Type") String contentType,
    @Header("X-API-KEY") String apiKey,
  );
}