package com.sn.sowsysrestapi.api.controller;

import com.sn.sowsysrestapi.api.converter.ReportDirectoryConverter;
import com.sn.sowsysrestapi.api.dto.ReportDirectoryDTO;
import com.sn.sowsysrestapi.domain.entity.ReportDirectory;
import com.sn.sowsysrestapi.domain.repository.ReportDirectoryRepo;
import com.sn.sowsysrestapi.domain.service.ReportDirectoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users/{userCode}/report-directory")
public class ReportDirectoryController {

    @Autowired
    private ReportDirectoryService reportDirectoryService;

    @Autowired
    private ReportDirectoryConverter reportDirectoryConverter;

    @Autowired
    private ReportDirectoryRepo reportDirectoryRepo;

    @GetMapping()
    public ReportDirectoryDTO findByOwnerId(@PathVariable String userCode) {

        ReportDirectory reportDirectory = reportDirectoryService.findOrFailByOwnerCode(userCode);

        return reportDirectoryConverter.toDto(reportDirectory);

    }

    @GetMapping("/supervision")
    public List<ReportDirectoryDTO> findBySupervisorId(@PathVariable String userCode, @RequestParam String supervisorCode) {

        return reportDirectoryConverter.toCollectionDTO(
                reportDirectoryService.findOrFailBySupervisorCode(userCode, supervisorCode));

    }

    @PutMapping("/add-supervisor")
    private void addSupervisorId(@PathVariable String userCode, @RequestParam String supervisorCode) {

        reportDirectoryService.addSupervisorIdToList(userCode, supervisorCode);

    }

    @PutMapping("/remove-supervisor")
    private void removeSupervisorId(@PathVariable String userCode, @RequestParam String supervisorCode) {

        reportDirectoryService.removeSupervisorIdFromList(userCode, supervisorCode);

    }


}
