package com.hepl.tunefortwo.service;

import java.awt.print.Pageable;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.hepl.tunefortwo.dto.PaymentOrderDto;
import com.hepl.tunefortwo.entity.MasterPayment;
import com.hepl.tunefortwo.entity.PaymentTransaction;
import com.razorpay.Payment;
import com.razorpay.RazorpayException;

import jakarta.mail.MessagingException;

@Service
public interface MasterPaymentService {
	public Map<String , String > createOrder(double amount,String formId)  throws RazorpayException, MessagingException;
	
	public boolean verifyPayment(String paymentId, String orderId, String signature);
	
	public String setPaymentsForAnOrderId(String paymentId, String razorpaySignature) throws RazorpayException, JsonMappingException, JsonProcessingException, MessagingException;
	
	public MasterPayment paymentWithNetBanking(Payment payment,String orderId,MasterPayment paymentsForOrderFound, String signature) throws JsonMappingException, JsonProcessingException;
	
	public MasterPayment paymentWithUPI(Payment payment,String orderId,MasterPayment paymentsForOrderFound, String signature) throws JsonMappingException, JsonProcessingException;
	
	public MasterPayment paymentWithCard(Payment payment,String orderId,MasterPayment paymentsForOrderFound, String signature) throws JsonMappingException, JsonProcessingException;
	
	public MasterPayment paymentWithWallet(Payment payment, String orderId,MasterPayment paymentsForOrderFound, String signature) throws JsonMappingException, JsonProcessingException;
	
	public void updateCommonFields(MasterPayment paymentData, Payment payment);
	
	public List<PaymentTransaction> getPaymentsForOrderId(String orderId);
	
	public List<MasterPayment> getPaymentsByUserName(String userName);
	
	public List<MasterPayment> getPaymentsByFormId(String formId);
	
//	public List<MasterPayment> getPaymentByStatus(String status, String orderId);
//	
//	public List<PaymentTransaction> getCapturedPayments(String orderId);
//	
	public List<MasterPayment> getPaymentsWithStatusCapturedOrFailed();
	
	public Map<String, Object> getPaymentsWithBYStatus(String status);
	
	public Map<String, Object> getAllOrders(org.springframework.data.domain.Pageable pageable,String status,String searchQuery);
	
	public PaymentTransaction findPaymentById(String paymentId);
	
	public List<PaymentTransaction> searchPaymentsByPaymentId(String query);
	
	public List<PaymentTransaction> genericSearchPayments(String query);
	
	public Map<String, Object> genericOrderSearch(String query);

}
