package ru.somecompany.controller;

import io.swagger.v3.oas.annotations.Operation;
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.CompanyEntity;
import ru.somecompany.domain.CreateCompanyRequest;

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


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

    @Operation(summary = "Получение всех компаний")
    @GetMapping(value = "/api/v1/company")
    List<CompanyEntity> getCompanies();

    @Operation(summary = "Создание компании")
    @PostMapping(value = "/api/v1/company")
    CompanyEntity createCompany(@RequestBody @NotNull CreateCompanyRequest companyRequest);

    @Operation(summary = "Получение информации о компании по id")
    @GetMapping(value = "/api/v1/company/{companyId}")
    CompanyEntity getCompany(@PathVariable UUID companyId);

    @Operation(summary = "Редактирование компании")
    @PutMapping(value = "/api/v1/company/{companyId}")
    CompanyEntity updateCompany(@PathVariable UUID companyId,
                                @RequestBody @NotNull CreateCompanyRequest companyRequest);

    @Operation(summary = "Удалении компании по id")
    @DeleteMapping(value = "/api/v1/company/{companyId}")
    void deleteCompany(@PathVariable UUID companyId);
}
