package com.hepl.tunefortwo.service.impl;

import java.time.LocalDate;
import java.util.List;

import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service;

import com.hepl.tunefortwo.entity.DeliveryDate;
import com.hepl.tunefortwo.repository.DeliveryDateRepository;
import com.hepl.tunefortwo.service.DeliveryDateService;

import jakarta.mail.MessagingException;
import lombok.extern.slf4j.Slf4j;

@Service
@Slf4j
public class DeliveryDateServiceImp implements DeliveryDateService {
	private final DeliveryDateRepository deliveryDateRepository;
	
	public DeliveryDateServiceImp(DeliveryDateRepository deliveryDateRepository) {
		this.deliveryDateRepository = deliveryDateRepository;
	}
	
	@Override
	public DeliveryDate addCollection() {
		List<DeliveryDate> findAllDeliveryDates = deliveryDateRepository.findAll();
		if(findAllDeliveryDates.isEmpty()) {
		DeliveryDate newDeliveryDate = new DeliveryDate();
		newDeliveryDate.setCreatedAt(LocalDate.now());
		newDeliveryDate.setUpdatedAt(LocalDate.now());
		newDeliveryDate.setEstimatedDays("10");
		newDeliveryDate.setPriceForTotalDays(1000);
		newDeliveryDate.setPricePerDay(100);
		return deliveryDateRepository.save(newDeliveryDate);
		}
		else {
	        throw new DataIntegrityViolationException("Delivery date collection already has data");
	    }
	}

	

	@Override
	public void updateDeliveryDate(String estimatedDays, Double priceForTotalDays, Double pricePerDay)
	        throws MessagingException {
	    List<DeliveryDate> findAllDeliveryDates = deliveryDateRepository.findAll();
	    if (!findAllDeliveryDates.isEmpty()) {
	        DeliveryDate deliveryDateFound = findAllDeliveryDates.get(0);
	        deliveryDateFound.setUpdatedAt(LocalDate.now());
	        if (estimatedDays != null && !estimatedDays.isEmpty()) {
	            deliveryDateFound.setEstimatedDays(estimatedDays);
	        }
	        if (priceForTotalDays != null && !Double.isNaN(priceForTotalDays)) {
	            deliveryDateFound.setPriceForTotalDays(priceForTotalDays);
	        }
	        if (pricePerDay != null && !Double.isNaN(pricePerDay)) {
	            deliveryDateFound.setPricePerDay(pricePerDay);
	        }
	        deliveryDateRepository.save(deliveryDateFound);
	    }
	}

	@Override
	public DeliveryDate getDeliveryDateData() {
		List<DeliveryDate> findAllDeliveryDates = deliveryDateRepository.findAll();
	    if (!findAllDeliveryDates.isEmpty()) {
	        DeliveryDate deliveryDateFound = findAllDeliveryDates.get(0);
	        return deliveryDateFound;
	    }
	    else {
	        throw new DataIntegrityViolationException("Delivery date collection has no data");
	    }
	}
		
	}


	


