package eu.dnetlib.usagestats.controllers;

import eu.dnetlib.usagestats.portal.UsageStats;
import eu.dnetlib.usagestats.repos.DatasourceRepo;
import eu.dnetlib.usagestats.repos.OrganizationRepo;
import eu.dnetlib.usagestats.repos.ProjectRepo;
import eu.dnetlib.usagestats.repos.ResultRepo;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;


@RestController
//@Transactional
public class UsageStatsController {
    @Autowired
    private DatasourceRepo datasourceRepo;

    @Autowired
    private ResultRepo resultRepo;

    @Autowired
    private OrganizationRepo organizationRepo;

    @Autowired
    private ProjectRepo projectRepo;

    private final Logger log = Logger.getLogger(this.getClass());

    @CrossOrigin(methods = RequestMethod.GET, origins = "*")
    @RequestMapping(value = "/datasources/{datasourceId}/clicks")
    public UsageStats getDatasourceClicks(@PathVariable(value = "datasourceId") String datasourceId) {
        log.info("stats request for datasource: " + datasourceId);
        return datasourceRepo.getClicks(datasourceId);
    }

    @RequestMapping(value = "/projects/{projectId}/clicks")
    @CrossOrigin(methods = RequestMethod.GET, origins = "*")
    public UsageStats getProjectClicks(@PathVariable(value = "projectId") String projectId) {
        log.info("stats request for project: " + projectId);
        return projectRepo.getClicks(projectId);
    }

    @RequestMapping(value = "/organizations/{organizationId}/clicks")
    @CrossOrigin(methods = RequestMethod.GET, origins = "*")
    public UsageStats getOrganizationClicks(@PathVariable(value = "organizationId") String organizationId) {
        log.info("stats request for organization: " + organizationId);
        return organizationRepo.getClicks(organizationId);
    }

    @RequestMapping(value = "/results/{resultId}/clicks")
    @CrossOrigin(methods = RequestMethod.GET, origins = "*")
    public UsageStats getResultClicks(@PathVariable(value = "resultId") String resultId) {
        log.info("stats request for result: " + resultId);
        return resultRepo.getClicks(resultId);
    }
}
