package com.app.Controller;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.app.Dto.SouscriptionDto;
import com.app.Services.SouscriptionService;
import com.fasterxml.jackson.databind.ObjectMapper;

@RestController
@RequestMapping("/api/v1/Souscription")
public class SouscriptionController {

	@Autowired
	private SouscriptionService serSous;

	@PostMapping("/save/{m}")
	public SouscriptionDto save(@RequestBody SouscriptionDto dto, @PathVariable String m) {
		return serSous.save(dto,m);
	}

	@PostMapping("/esing/{m}")
    public String signer(@RequestBody Map<String, Object> requestBody, @PathVariable String m) {
		 SouscriptionDto souscription = new ObjectMapper().convertValue(requestBody.get("souscription"), SouscriptionDto.class);
		// Assurez-vous que "offre" est bien un Map
	        System.out.println("Request Body: " + requestBody);
	        String dataoffre = requestBody.get("offre").toString();
		   
		return serSous.signature(souscription,m,dataoffre);
	}

	@PostMapping("/esingresili/{m}")
    public String signerResiliation(@RequestBody Map<String, Object> requestBody, @PathVariable String m) {
		SouscriptionDto souscription = new ObjectMapper().convertValue(requestBody.get("souscription"), SouscriptionDto.class);
		// Assurez-vous que "offre" est bien un Map
	        System.out.println("Request Body: " + requestBody);
	        String dataoffre = requestBody.get("offre").toString();
		return serSous.signatureresili(souscription,m,dataoffre);
	}
	
	@GetMapping("/statut/{id}")
    public String docStatuts(@PathVariable String id) {
		return serSous.signatureStatut(id);
	}
	
	@PostMapping("/esingdevoir/{m}")
    public String signerDevoir(@RequestBody Map<String, Object> requestBody, @PathVariable String m) {
		SouscriptionDto souscription = new ObjectMapper().convertValue(requestBody.get("souscription"), SouscriptionDto.class);
		// Assurez-vous que "offre" est bien un Map
	        System.out.println("Request Body: " + requestBody);
	        String dataoffre = requestBody.get("offre").toString();
		return serSous.signaturedevoir(souscription,m,dataoffre);
	}
	
	@PostMapping("/update/{m}")
	public SouscriptionDto update(@RequestBody SouscriptionDto dto, @PathVariable String m) {
		return serSous.update(dto,m);
	}

	@DeleteMapping("/delete/{id}")
	public void delete(@PathVariable Long id ) {
		serSous.delete(id);
	}
	@GetMapping("/findbyid/{id}")
	public SouscriptionDto findById(@PathVariable Long id) {
		return serSous.findById(id);
	}

	@GetMapping("/lister")
	public List<SouscriptionDto> findAllEmployees() {
		return serSous.findAllSouscription();
	}
	@GetMapping("/getSousByParcours/{nameParcours}")
	public List<SouscriptionDto> listerSousbyParcours(@PathVariable String nameParcours) {
		return serSous.listerSousbyParcours("%"+nameParcours+"%");
	}
}
