package premium_store.controller.controller;

import org.springframework.web.bind.annotation.*;
import premium_store.WebConfiguration;
import premium_store.controller.DTO.FullNationDTO;
import premium_store.service.NationService;
import premium_store.service.TankService;

import java.util.List;

//привязываем наш контроллер к придуманному корневому URL благодаря аннотациям
//здесь происходит внедрение зависимости нашего сервиса
//так же здесь прописываем вызовы методов CRUD в привязке к URL
@RestController
@CrossOrigin
@RequestMapping(WebConfiguration.REST_API + "/nation")
public class NationController {
    private final NationService nationService;
    private final TankService tankService;

    public NationController(NationService nationService, TankService tankService){
        this.nationService = nationService;
        this.tankService = tankService;
    }

    //аннотация PathVariable связывает значения id из URL и Long id
    @GetMapping("/{id}")
    public FullNationDTO getNation(@PathVariable Long id) {
        return new FullNationDTO(nationService.findNation(id));
    }

    //с помощью Java Stream преобразуем набор пришедших данных в объекты StudentDto
    @GetMapping("/")
    public List<FullNationDTO> getNations() {
        return nationService.findAllNations().stream()
                .map(FullNationDTO::new)
                .toList();
    }

    @PostMapping("/")
    public FullNationDTO createNation(@RequestParam("nation") String nation) {
        return new FullNationDTO(nationService.addNation(nation));
    }

    @PutMapping("/{id}")
    public FullNationDTO updateNation(@PathVariable Long id,
                                      @RequestParam("nation") String nation,
                                      @RequestParam(value = "tankId", required = false) Long tankId  ) {
        return new FullNationDTO(nationService.updateNation(id, nation, (tankId > 0) ? tankService.findTank(tankId) : null));
    }

    @DeleteMapping("/{id}")
    public FullNationDTO deleteNation(@PathVariable Long id) {
        return new FullNationDTO(nationService.deleteNation(id));
    }
}

