package org.eclipse.openk.contactbasedata.controller;

import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.log4j.Log4j2;
import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
import org.eclipse.openk.contactbasedata.service.ContactService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.annotation.Secured;
import org.springframework.web.bind.annotation.*;

import java.util.Optional;
import java.util.UUID;

import static org.springframework.data.domain.Sort.Direction.ASC;

@Log4j2
@RestController
@RequestMapping("/contacts")
public class ContactController {
    @Autowired
    private ContactService contactService;

    @ApiOperation(value = "Anzeigen aller gespeicherter Kontakte")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
    @ResponseStatus(HttpStatus.OK)
    @Secured({"ROLE_KON-READER", "ROLE_KON-WRITER", "ROLE_KON-ADMIN"})
    @GetMapping
    public Page<VwDetailedContact> findContacts(
            @RequestParam( "contactType") Optional<String> contactType,
            @RequestParam( "personTypeId" ) Optional<UUID> personTypeUuid,
            @RequestParam( "searchText" ) Optional<String> searchText,
            @PageableDefault( sort = {"name"}, size = 20, direction = ASC) Pageable pageable ) {
        return contactService.findDetailedContacts(
                contactType.orElse(null),
                personTypeUuid.orElse(null),
                searchText.orElse( null), pageable);
    }

}
