package com.hepl.tunefortwo.service;


import java.io.IOException;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.io.OutputStream;


import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.multipart.MultipartFile;

import com.hepl.tunefortwo.dto.FormRequestDto;
import com.hepl.tunefortwo.dto.OrderPosition;
import com.hepl.tunefortwo.dto.OrderTrackerDto;
import com.hepl.tunefortwo.entity.Form;
import com.hepl.tunefortwo.entity.MasterPayment;

import jakarta.mail.MessagingException;


public interface FormService {
	public Form saveForm(FormRequestDto form)throws MessagingException;

	public Map<String, Object> allForms(Pageable pageable, boolean isAdmin, String query);
	
	public String updateOrderPosition(OrderPosition orderPosition , String id, String filePath) throws MessagingException;
	
	public Map<String, Object> getFormsByOrderPosition(OrderPosition position,Sort sort, boolean isAdmin);
	
	public void updateForm(FormRequestDto dto , String id) throws IOException, MessagingException;
	
	public FormRequestDto getFormById(String id);
	
	public List<Object> trackerOrder(String number, String orderId);
	
	public void addScreenShot (String orderId , String path);
	
	public void addcomment (String orderId , String comment , LocalDate deliveryDate,String orderNumber) throws MessagingException;

	public void addReview(String orderId, String summary, int star, String image, String video);
	
//	public void updateRatingAndReview(int rating, String review, String id,String image,String video);
	public void updateRatingAndReview(int rating, String review, String id,List<String> image,String video);
	
	public FormRequestDto getRatingandReview(String id);
	
	public boolean isValidTransition(OrderPosition currentOrderPosition, OrderPosition newOrderPosition) ;
	
	public FormRequestDto rejectAFormByItsId(String id, String activestatus);
	    
	public Map<String,Object> getAllRejectedForms(String activestatus);
		
	public void exportToExcel(LocalDate startDate, LocalDate endDate, OutputStream outputStream) throws IOException;
	
	public boolean validateMobileNumber(String countryCode, String mobileNumber);
	
	public String getNumberInfo(String countryCode, String mobileNumber);
	
	 public String[] extractCountryCodeAndNationalNumber(String phoneNumber);
	 
	 public Map<String, Object> genericFormSearch(String query, boolean isAdmin);
	 
	 
	
}
