package ru.somecompany.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotNull;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
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.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import ru.somecompany.domain.CreateVacancyRequest;
import ru.somecompany.domain.VacancyEntity;
import ru.somecompany.domain.VacancyResponse;

import java.util.List;
import java.util.UUID;

@Validated
@Tag(name = "vacancy", description = "API для управления вакансиями")
public interface VacancyController {

    @Operation(summary = "Получение всех вакансий")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "Данные успешно переданы"),
    })
    @GetMapping(value = "/api/v1/vacancy")
    List<VacancyEntity> getVacancies();

    @Operation(summary = "Создание вакансии")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "Вакансия успешно создана"),
    })
    @PostMapping(value = "/api/v1/vacancy")
    VacancyEntity createVacancy(@RequestBody @NotNull CreateVacancyRequest request);

    @Operation(summary = "Получение информации о вакансии по id")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "Данные успешно переданы"),
            @ApiResponse(responseCode = "404", description = "Вакансия не найдена")
    })
    @GetMapping(value = "/api/v1/vacancy/{vacancyId}")
    VacancyResponse getVacancy(@PathVariable UUID vacancyId);

    @Operation(summary = "Редактирование вакансии")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "Данные вакансии успешно изменены"),
            @ApiResponse(responseCode = "404", description = "Вакансия не найдена")
    })
    @PutMapping(value = "/api/v1/vacancy/{vacancyId}")
    VacancyEntity updateVacancy(@PathVariable UUID vacancyId,
                                @RequestBody @NotNull CreateVacancyRequest request);

    @Operation(summary = "Удалении вакансии по id")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "Вакансия успешно удалена"),
            @ApiResponse(responseCode = "404", description = "Вакансия не найдена")
    })
    @DeleteMapping(value = "/api/v1/vacancy/{vacancyId}")
    void deleteVacancy(@PathVariable UUID vacancyId);
}
