package com.tamarasdk.repository import androidx.lifecycle.LiveData import com.tamarasdk.AppExecutors import com.tamarasdk.api.ApiResponse import com.tamarasdk.api.ApiSuccessResponse import com.tamarasdk.api.Service import com.tamarasdk.model.request.CancelOrder import com.tamarasdk.model.request.CapturePaymentRequest import com.tamarasdk.model.request.PaymentOptions import com.tamarasdk.model.request.PaymentRefund import com.tamarasdk.model.response.* import com.tamarasdk.model.response.PaymentType import com.tamarasdk.model.response.orderdetail.OrderDetail import com.tamarasdk.vo.AbsentLiveData import com.tamarasdk.vo.Resource import javax.inject.Inject import javax.inject.Singleton @Singleton internal class InformationRepository @Inject constructor( private val appExecutors: AppExecutors, private val service: Service ) { fun paymentType(country: String?, currency: String?): LiveData>> { return object : NetworkBoundResource, ArrayList>(appExecutors){ override fun shouldFetch(data: ArrayList?): Boolean { return true } override fun loadFromDb(): LiveData> { return AbsentLiveData.create() } override fun createCall(): LiveData>> { return service.paymentType(country, currency) } override fun processResponse(response: ApiSuccessResponse>): ArrayList { return response.body } }.asLiveData() } fun orderDetail(orderId: String?): LiveData> { return object : NetworkBoundResource(appExecutors){ override fun shouldFetch(data: OrderDetail?): Boolean { return true } override fun loadFromDb(): LiveData { return AbsentLiveData.create() } override fun createCall(): LiveData> { return service.getOrderDetail(orderId) } override fun processResponse(response: ApiSuccessResponse): OrderDetail { return response.body } }.asLiveData() } fun getCapturePayment(capturePayment: CapturePaymentRequest): LiveData> { return object : NetworkBoundResource(appExecutors){ override fun shouldFetch(data: CapturePayment?): Boolean { return true } override fun loadFromDb(): LiveData { return AbsentLiveData.create() } override fun createCall(): LiveData> { return service.getCapturePayment(capturePayment) } override fun processResponse(response: ApiSuccessResponse): CapturePayment { return response.body } }.asLiveData() } fun refunds(orderId: String?, paymentRefund: PaymentRefund): LiveData>{ return object : NetworkBoundResource(appExecutors){ override fun shouldFetch(data: RefundsResponse?): Boolean { return true } override fun loadFromDb(): LiveData { return AbsentLiveData.create() } override fun createCall(): LiveData> { return service.refunds(orderId, paymentRefund) } override fun processResponse(response: ApiSuccessResponse): RefundsResponse { return response.body } }.asLiveData() } fun cancelOrder(orderId: String?, cancelOrder: CancelOrder): LiveData>{ return object : NetworkBoundResource(appExecutors){ override fun shouldFetch(data: CancelOrderResponse?): Boolean { return true } override fun loadFromDb(): LiveData { return AbsentLiveData.create() } override fun createCall(): LiveData> { return service.cancelOrder(orderId, cancelOrder) } override fun processResponse(response: ApiSuccessResponse): CancelOrderResponse { return response.body } }.asLiveData() } fun updateOrderReference(orderId: String?, orderReference: com.tamarasdk.model.request.OrderReference): LiveData>{ return object : NetworkBoundResource(appExecutors){ override fun shouldFetch(data: OrderReference?): Boolean { return true } override fun loadFromDb(): LiveData { return AbsentLiveData.create() } override fun createCall(): LiveData> { return service.updateOrderReference(orderId, orderReference) } override fun processResponse(response: ApiSuccessResponse): OrderReference { return response.body } }.asLiveData() } fun authoriseOrder(orderId: String?): LiveData> { return object : NetworkBoundResource(appExecutors){ override fun shouldFetch(data: AuthoriseOrder?): Boolean { return true } override fun loadFromDb(): LiveData { return AbsentLiveData.create() } override fun createCall(): LiveData> { return service.authoriseOrder(orderId) } override fun processResponse(response: ApiSuccessResponse): AuthoriseOrder { return response.body } }.asLiveData() } fun paymentOptions(paymentOptions: PaymentOptions): LiveData>{ return object : NetworkBoundResource(appExecutors){ override fun shouldFetch(data: PaymentOptionsResponse?): Boolean { return true } override fun loadFromDb(): LiveData { return AbsentLiveData.create() } override fun createCall(): LiveData> { return service.paymentOptions(paymentOptions) } override fun processResponse(response: ApiSuccessResponse): PaymentOptionsResponse { return response.body } }.asLiveData() } }