package app.api;

import app.entities.ClassEntity;
import app.entities.MinutePaperEntity;
import app.pojo.PaperDetailsWrapper;
import app.pojo.ResponseGraphDetails;
import app.services.ClassInfoService;
import app.services.GraphDataService;
import app.services.LecturerInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

@RestController
public class LecturerController {

    @Autowired
    private LecturerInfoService lecturerInfoService;

    @Autowired
    private ClassInfoService classInfoService;

    @Autowired
    private GraphDataService graphDataService;

    @PostMapping(value = "/getLecturerClasses",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public List<ClassEntity> getClassList(@RequestBody Map<String,String> request) {
        return classInfoService.getClasses(request.get("username"));
    }

    @PostMapping(value = "/getClassPapers",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public List<MinutePaperEntity> getClassPapers(@RequestBody Map<String,String> request) {
        return lecturerInfoService.getClassPapers(request.get("username"),request.get("classCode"));
    }

    @PostMapping(value = "/getTemplates",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public List<PaperDetailsWrapper> getTemplates(@RequestBody Map<String,String> request) {
        return lecturerInfoService.getTemplates(request.get("username"));
    }

    @PostMapping(value = "/createPaper",consumes = MediaType.APPLICATION_JSON_VALUE)
    public void createPaper(@RequestBody PaperDetailsWrapper request) {
        lecturerInfoService.create(request,false);
    }

    @PostMapping(value = "/deletePaper",consumes = MediaType.APPLICATION_JSON_VALUE)
    public void deletePaper(@RequestBody Map<String,String> request) {
        lecturerInfoService.delete(request.get("paperId"),false);
    }

    @PostMapping(value = "/createTemplate",consumes = MediaType.APPLICATION_JSON_VALUE)
    public void createTemplate(@RequestBody PaperDetailsWrapper request) {
        lecturerInfoService.create(request,true);
    }

    @PostMapping(value = "/deleteTemplate",consumes = MediaType.APPLICATION_JSON_VALUE)
    public void deleteTemplate(@RequestBody Map<String,String> request) {
        lecturerInfoService.delete(request.get("paperId"),true);
    }

    @PostMapping(value = "/getResponseData",consumes = MediaType.APPLICATION_JSON_VALUE)
    public List<ResponseGraphDetails> getResponseData(@RequestBody Map<String,String> request) {
        return graphDataService.getResponseGraphData(request.get("username"));
    }

}