package es.uv.saic.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;

import es.uv.saic.domain.Plantilla;
import es.uv.saic.dto.PdfDTO;
import es.uv.saic.dto.TemplateDataDTO;
import es.uv.saic.service.PlantillaService;

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.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;


@RestController
public class PlantillaController {
    @Autowired
    private PlantillaService ps;

    @GetMapping("/plantilla")
    public ResponseEntity<?> findAll() {
        try {
            List<Plantilla> plantillas = ps.findAll();

             return (plantillas != null) ? ResponseEntity.ok(plantillas) : 
                ResponseEntity.badRequest().body("No existen plantillas") ;
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("No se han podido recoger las plantillas: " + e.getMessage());
        }
    }

    @GetMapping("/plantilla/{id}")
    public ResponseEntity<?> findByID(@PathVariable Integer id) {
        try {
            Plantilla plantilla = ps.findByID(id);

             return (plantilla != null) ? ResponseEntity.ok(plantilla) : 
                ResponseEntity.badRequest().body("No existe la plantilla buscada") ;
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("No se ha podido recoger la plantilla " + e.getMessage());
        }
    }
    
    @GetMapping("/plantilla/{versio}/{codi}/{ambit}")
    public ResponseEntity<?> findByVersioCodiAmbit(@PathVariable Integer versio,
        @PathVariable String codi,
        @PathVariable String ambit) {
        try {
            Plantilla plantilla = ps.findByVersioCodiAmbit(versio, codi, ambit);

             return (plantilla != null) ? ResponseEntity.ok(plantilla) : 
                ResponseEntity.badRequest().body("No existe la plantilla buscada") ;
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("No se ha podido recoger la plantilla " + e.getMessage());
        }
    }

    @PostMapping("/plantilla/save")
    public ResponseEntity<?> save(@RequestBody Plantilla plantilla) {
        try {
            ps.save(plantilla);
            return ResponseEntity.ok("Save");
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("Error guardando la plantilla: " + e.getMessage());
        }
    }
    
    @DeleteMapping("/plantilla/delete")
    public ResponseEntity<?> delete(@RequestBody Plantilla plantilla) {
        try {
            ps.delete(plantilla);
            return ResponseEntity.ok("Delete");
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("Error borrando la plantilla: " + e.getMessage());
        }
    }
    
    @GetMapping("/plantilla/used/{id}")
    public ResponseEntity<?> isUsed(@PathVariable Integer id) {
        try {
            Boolean isUsed = ps.isUsed(id);

             return (isUsed != null) ? ResponseEntity.ok(isUsed) : 
                ResponseEntity.badRequest().body("No existe la plantilla que se esta buscando") ;
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("No se ha podido comprobar si la plantilla es usada: " + e.getMessage());
        }
    }

    @PostMapping("/addTemplateData")
    public ResponseEntity<?> addTemplateData(@RequestBody TemplateDataDTO td) {
        try {
            String template = ps.addTemplateData(td.getInstanciaTasca(), td.getTemplate());        
            return (template != null) ? ResponseEntity.ok(template) : 
                ResponseEntity.badRequest().body("La plantilla no se ha podido rellenar.") ; 
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("La plantilla no se ha podido rellenar: " + e.getMessage());
        }
    }
    
    @PostMapping("/addTemplateData2")
    public ResponseEntity<?> addTemplateData2(@RequestBody TemplateDataDTO td) {
        try {
            String template = ps.addTemplateData(td.getIdTitulacio(), td.getIdCentre(), td.getCurs(), td.getTemplate());        
            return (template != null) ? ResponseEntity.ok(template) : 
                ResponseEntity.badRequest().body("La plantilla no se ha podido rellenar.") ; 
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("La plantilla no se ha podido rellenar: " + e.getMessage());
        }
    }

    @PostMapping("/savePDF")
    public ResponseEntity<?> savePDF(@RequestBody PdfDTO pdf) {
        try {
            String dst = ps.savePDF(pdf.getContent(), pdf.getIdtasca());        
            return (dst != null) ? ResponseEntity.ok(dst) : 
                ResponseEntity.badRequest().body("La plantilla no se ha podido rellenar.") ; 
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("La plantilla no se ha podido rellenar: " + e.getMessage());
        }
    }
    
}
