package es.uv.saic.feign;

import java.io.IOException;
import java.math.BigInteger;
import java.net.MalformedURLException;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;

import org.springframework.cloud.openfeign.FeignClient;
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.RequestParam;
import org.xml.sax.SAXException;

import es.uv.saic.domain.Indicador;
import es.uv.saic.dto.IndicadorEnquestaDTO;
import es.uv.saic.dto.IndicadorEnquestaValorDTO;
import es.uv.saic.dto.IndicadorEnquestaValorDTOImp;
import es.uv.saic.dto.InstanciaTascaDTO;
import es.uv.saic.dto.NomProcesOrganDTO;
import es.uv.saic.dto.OrganDTO;
import es.uv.saic.dto.ProcesDTO;
import es.uv.saic.dto.TascaDTO;
import es.uv.saic.dto.TascaInformeTransferDTO;

@FeignClient(name = "core-service")
public interface CoreClient {
    //IndicadorController.java
    @GetMapping("/getFromTitulacio/{idTitulacio}/{curs}")
    public List<Indicador> getFromTitulacion(@PathVariable Integer idTitulacio, @PathVariable Integer curs) 
        throws ParserConfigurationException, MalformedURLException, IOException, SAXException;

   @PostMapping("/allInds")
    public List<IndicadorEnquestaValorDTOImp> getAllInds2(@RequestBody IndicadorEnquestaDTO indicadorEnquestaDTO);

    //TascaController.java
    @GetMapping("/instanciatasca/{id}")
    InstanciaTascaDTO findInstanciaTascaById(@PathVariable("id") BigInteger id);

    @PostMapping("/getReportFromNomProcesOrgan")
    InstanciaTascaDTO getReportFromNomProcesOrgan(@RequestBody NomProcesOrganDTO nomProcesOrgan);
    
    @PostMapping("/getLastByProcName")
    TascaInformeTransferDTO getLastByProcName(@RequestBody ProcesDTO tascaDTO);

    @GetMapping("/getByProcesTascap/{idProces}/{idTascap}")
    TascaDTO getByProcesTascap(@PathVariable Integer idProces, @PathVariable Integer idTascap);

    //OrganController.java
    @GetMapping("/getTitulacionsByCentreTambit/{centre}/{tambit}")
    List<OrganDTO> getTitulacionsByCentreTambit(@PathVariable("centre") Integer lugar, @PathVariable("tambit") String tambit);

    @GetMapping("/findById/{tlugar}/{idTitulacio}")
    OrganDTO findOrganById(@PathVariable("tlugar") String tlugar,  @PathVariable("idTitulacio") Integer idTitulacio);

    @GetMapping("/getTitulacionsByTypeCentre/{lugar}/{ambit}")
    List<OrganDTO> getTitulacionsByTypeCentre(@PathVariable Integer lugar, @PathVariable Integer ambit);

    //ProcesController.java
    @PostMapping("/proces/{id}")
    ProcesDTO findProcesdById(@PathVariable("id") Integer id);
}
