package org.egl_cepgl.pm.controller.admin;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import org.egl_cepgl.pm.dto.CountryDto;
import org.egl_cepgl.pm.dto.EnterpriseDto;
import org.egl_cepgl.pm.dto.EnterpriseQualificationDto;
import org.egl_cepgl.pm.model.Enterprise;
import org.egl_cepgl.pm.model.EnterpriseQualification;
import org.egl_cepgl.pm.service.EnterpriseQualificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

@Slf4j
@Api("api/admin/enterprise_qualification")
@RestController
@RequestMapping("api/admin/enterprise_qualification")
public class EnterpriseQualificationController
{
    private EnterpriseQualificationService service;

    @Autowired
    public EnterpriseQualificationController(EnterpriseQualificationService service) {
        this.service = service;
    }

    //@PreAuthorize("hasAuthority('ROLE_default-roles-egl_pm')")
    @PostMapping(value = "/add",consumes= MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    @ApiOperation(value="Add ..", notes="Cette méthode permet de..", response = EnterpriseQualification.class)
    @ApiResponses(value= { @ApiResponse(code= 200, message = "créé/modifié"), @ApiResponse(code= 400, message = "Non valide") })
    public ResponseEntity<EnterpriseQualificationDto> add(@RequestBody EnterpriseQualification obj)
    {
        //log.info("BVDDDDDDDDDDDDEEEE==="+userDto.toString());
        return ResponseEntity.ok(EnterpriseQualificationDto.fromEntity(this.service.add(obj)));
    }

    @GetMapping(value = "/all",produces = MediaType.APPLICATION_JSON_VALUE)
    @ApiOperation(value="List ..", notes="Cette méthode permet..", responseContainer = "List<EnterpriseQualification>")
    @ApiResponses(value= { @ApiResponse(code= 200, message = "Une liste des ..") })
    public ResponseEntity<Map<String, Object>> findAll(
            @RequestParam(required = false) String search,
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "5") int size
    ){
        Page<EnterpriseQualification> objs= service.findAll(search, page, size);
        Map<String, Object> response = new HashMap<>();
        response.put("enterpriseQuals", objs.getContent().stream().map(EnterpriseQualificationDto::fromEntity).collect(Collectors.toList()));
        response.put("currentPage", objs.getNumber());
        response.put("totalItems", objs.getTotalElements());
        response.put("totalPages", objs.getTotalPages());

        return new ResponseEntity<>(response, HttpStatus.OK);
    }

    @PutMapping(value = "/update",consumes= MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    @ApiOperation(value="Update ..", notes="Cette méthode permet de..", response = EnterpriseQualification.class)
    @ApiResponses(value= { @ApiResponse(code= 200, message = "créé/modifié"), @ApiResponse(code= 400, message = "Non valide") })
    public ResponseEntity<EnterpriseQualificationDto> update(@RequestBody EnterpriseQualification obj)
    {    return ResponseEntity.ok(EnterpriseQualificationDto.fromEntity(this.service.update(obj)));   }

    @DeleteMapping(value = "/delete/{id}")
    @ApiOperation(value = "Suppression d'un..", notes = "Cette méthode permet de supprimer..")
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "Supprimé")
    })
    ResponseEntity delete(@PathVariable("id") Long id) {
        service.delete(id);
        return ResponseEntity.ok().build();
    }
}
