package com.hepl.tunefortwo.controller;

import java.time.LocalDate;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.hepl.tunefortwo.config.i18n.Translator;
import com.hepl.tunefortwo.dto.GenericData;
import com.hepl.tunefortwo.dto.GenericResponse;
import com.hepl.tunefortwo.entity.DeliveryDate;
import com.hepl.tunefortwo.service.DeliveryDateService;
import com.hepl.tunefortwo.utils.AppMessages;

import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.mail.MessagingException;
import lombok.extern.slf4j.Slf4j;

@Tag(name = "Manage Delivery Date", description = "")
//@SecurityRequirement(name = "Bearer Authentication")
@RestController
@RequestMapping("/v1/deliveryDate")
@Slf4j
public class DeliveryDateController {
	
	private final DeliveryDateService deliveryDateService;
	private final Translator translator;
	
	public DeliveryDateController(DeliveryDateService deliveryDateService,Translator translator) {
		this.deliveryDateService = deliveryDateService;
		this.translator = translator;
	}

	@GetMapping()
	public GenericResponse createDeliveryDateCollection() {
		
		GenericResponse response = new GenericResponse(true);
		GenericData data = new GenericData();
		DeliveryDate addedData = deliveryDateService.addCollection();
		data.setDeliveryDate(addedData);
		response.setData(data);
		response.setMessage(translator.toLocale(AppMessages.DELIVERYDATEDATA_ADDED_SUCCESSFULLY));
		return response;
	}
	
	@PutMapping("/updateDeliveryDate")
	public GenericResponse updateDeliveryDate(@RequestParam(required = false) String estimatedDays,
											  @RequestParam(required = false) Double priceForTotalDays,
											  @RequestParam(required = false) Double pricePerDay
											  ) throws MessagingException {
		deliveryDateService.updateDeliveryDate(estimatedDays, priceForTotalDays, pricePerDay);
		GenericResponse response = new GenericResponse(true);
		response.setMessage(translator.toLocale(AppMessages.DELIVERYDATEDATA_UPDATED_SUCCESSFULLY));
		return response;
		
		
	}
	@GetMapping("/getDeliveryDate")
	public GenericResponse getDeliveryDateData() {
		GenericResponse response = new GenericResponse(true);
		DeliveryDate deliveryDateData= deliveryDateService.getDeliveryDateData();
		GenericData data = new GenericData();
		data.setDeliveryDate(deliveryDateData);
		response.setData(data);
		response.setMessage(translator.toLocale(AppMessages.DELIVERYDATEDATA_GETDATA_SUCCESS));
		return response;
	}
	
}
