package sn.ladoum.bergerie.controller;

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import sn.ladoum.bergerie.dto.NaissanceCompleteDto;
import sn.ladoum.bergerie.dto.NaissanceDto;
import sn.ladoum.bergerie.dto.NaissanceResultatDto;
import sn.ladoum.bergerie.service.NaissanceService;

import java.util.List;

@RestController
@RequestMapping("/naissances")
@RequiredArgsConstructor
public class NaissanceController {

    private final NaissanceService naissanceService;

    @GetMapping
    public List<NaissanceDto> getAll() {
        return naissanceService.findAll();
    }

    @GetMapping("/{id}")
    public NaissanceDto getById(@PathVariable Long id) {
        return naissanceService.findById(id);
    }

    @PostMapping
    @PreAuthorize("hasAnyRole('ADMIN','ELEVEUR')")
    @ResponseStatus(HttpStatus.CREATED)
    public NaissanceDto create(@Valid @RequestBody NaissanceDto dto) {
        return naissanceService.create(dto);
    }

    @PostMapping("/complete")
    @PreAuthorize("hasAnyRole('ADMIN','ELEVEUR')")
    @ResponseStatus(HttpStatus.CREATED)
    public NaissanceResultatDto enregistrerNaissanceComplete(@Valid @RequestBody NaissanceCompleteDto dto) {
        return naissanceService.enregistrerNaissanceComplete(dto);
    }

    @PutMapping("/{id}")
    @PreAuthorize("hasAnyRole('ADMIN','ELEVEUR')")
    public NaissanceDto update(@PathVariable Long id, @Valid @RequestBody NaissanceDto dto) {
        return naissanceService.update(id, dto);
    }

    @DeleteMapping("/{id}")
    @PreAuthorize("hasRole('ADMIN')")
    public ResponseEntity<Void> delete(@PathVariable Long id) {
        naissanceService.delete(id);
        return ResponseEntity.noContent().build();
    }
}
