package es.uv.saic.web;

import java.io.IOException;

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

import es.uv.saic.dto.CategoriaDTO;
import es.uv.saic.dto.DocumentTmpDTO;
import es.uv.saic.domain.Document;
import es.uv.saic.service.DocumentService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;


@RestController
public class DocumentController {
    @Autowired
    private DocumentService ds;
    /*
     * endpoint para save
     */
    @PostMapping("/document/save")
    public ResponseEntity<?> save(@RequestBody Document doc) {
        try {
            Document auxDocument = ds.save(doc);        
            return (auxDocument != null) ? ResponseEntity.ok(auxDocument) : 
                ResponseEntity.badRequest().body("El documento no se a podido guardad correctamente.") ; 
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("Hubo un error al procesar el documento: " + e.getMessage());
        }   
    }

    /*
     * endpoing para findByCategoriaOrgan
     */
    @PostMapping("/findByCategoriaOrgan")
    public ResponseEntity<?> findByCategoriaOrgan(@RequestBody CategoriaDTO categoria) {
        try {
            Document document = ds.findByCategoriaOrgan(categoria.getCategoria(), categoria.getLugar(), categoria.getTlugar());
            return (document != null) ? ResponseEntity.ok(document) : 
                ResponseEntity.badRequest().body("El documento no se a podido encontrar.") ;
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("Hubo un error al procesar el documento: " + e.getMessage());
        }
    }

    /*
     * endpoint para findByID
     */
    @GetMapping("/document/{idDocument}")
    public ResponseEntity<?> findByID(@RequestParam Integer idDocument) {
        try {
            Document document = ds.findById(idDocument);
            return (document != null) ? ResponseEntity.ok(document) : 
                ResponseEntity.badRequest().body("El documento no se a podido encontrar.") ;
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("No se encontro el documento: " + e.getMessage());
        }
    }
    

    /*
     * endpoint para upload
     */
    @PostMapping("/document/upload")
    public ResponseEntity<String> upload(@RequestBody DocumentTmpDTO documentTmpDTO) {
        try{
            return ResponseEntity.ok(ds.upload(documentTmpDTO.getIdDocument(), documentTmpDTO.getIdCategoria(),
                documentTmpDTO.getLugar(), documentTmpDTO.getTlugar(), documentTmpDTO.getFile()));
        } catch(IllegalStateException e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("Error: " + e.getMessage());
        } catch(IOException e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("Error: " + e.getMessage());
        }
    }

    @PostMapping("/document/archive")
    public ResponseEntity<?> archive(@RequestBody Document doc) {
        try {
            Document auxDocument = ds.archive(doc);        
            return (auxDocument != null) ? ResponseEntity.ok(auxDocument) : 
                ResponseEntity.badRequest().body("El documento no se a podido archivar correctamente.") ; 
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("Hubo un error al procesar el documento: " + e.getMessage());
        }
        
    }
}