package premium_store.controller.controller;

import org.springframework.web.bind.annotation.*;
import premium_store.WebConfiguration;
import premium_store.controller.DTO.LevelDTO;
import premium_store.service.TankLevelService;

import java.util.List;

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

    public TankLevelController(TankLevelService tankLevelService){
        this.tankLevelService = tankLevelService;
    }

    //аннотация PathVariable связывает значения id из URL и Long id
    @GetMapping("/{id}")
    public LevelDTO getLevel(@PathVariable Long id) {
        return new LevelDTO(tankLevelService.findLevel(id));
    }

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

    @PostMapping("/")
    public LevelDTO createLevel(@RequestParam("Level") int level) {
        return new LevelDTO(tankLevelService.addLevel(level));
    }

    @PutMapping("/{id}")
    public LevelDTO updateLevel(@PathVariable Long id,
                                @RequestParam("Level") int level) {
        return new LevelDTO(tankLevelService.updateLevel(id, level));
    }

    @DeleteMapping("/{id}")
    public LevelDTO deleteLevel(@PathVariable Long id) {
        return new LevelDTO(tankLevelService.deleteLevel(id));
    }
}
