'use strict';

const {
    fetchReleases,
    fetchActorReleases,
    fetchNetworkReleases,
    fetchSiteReleases,
    fetchTagReleases,
} = require('../releases');

async function fetchReleasesApi(req, res) {
    const releases = await fetchReleases({}, req.query);

    res.send(releases);
}

async function fetchReleaseByIdApi(req, res) {
    const [release] = await fetchReleases({
        id: req.params.releaseId,
    });

    res.send(release);
}

async function fetchActorReleasesApi(req, res) {
    const actorId = Number.isInteger(Number(req.params.actorId)) ? Number(req.params.actorId) : null;
    const actorSlug = typeof req.params.actorId === 'string' ? req.params.actorId : null;

    const releases = await fetchActorReleases({
        id: actorId,
        slug: actorSlug,
    }, req.query);

    res.send(releases);
}

async function fetchNetworkReleasesApi(req, res) {
    const networkId = typeof req.params.networkId === 'number' ? req.params.networkId : null;
    const networkSlug = typeof req.params.networkId === 'string' ? req.params.networkId : null;

    const releases = await fetchNetworkReleases({
        id: networkId,
        slug: networkSlug,
    }, req.query);

    res.send(releases);
}

async function fetchSiteReleasesApi(req, res) {
    const siteId = typeof req.params.siteId === 'number' ? req.params.siteId : null;
    const siteSlug = typeof req.params.siteId === 'string' ? req.params.siteId : null;

    const releases = await fetchSiteReleases({
        id: siteId,
        slug: siteSlug,
    }, req.query);

    res.send(releases);
}

async function fetchTagReleasesApi(req, res) {
    const tagId = typeof req.params.tagId === 'number' ? req.params.tagId : null;
    const tagSlug = typeof req.params.tagId === 'string' ? req.params.tagId : null;

    const releases = await fetchTagReleases({
        id: tagId,
        slug: tagSlug,
    }, req.query);

    res.send(releases);
}

module.exports = {
    fetchReleases: fetchReleasesApi,
    fetchReleaseById: fetchReleaseByIdApi,
    fetchActorReleases: fetchActorReleasesApi,
    fetchNetworkReleases: fetchNetworkReleasesApi,
    fetchSiteReleases: fetchSiteReleasesApi,
    fetchTagReleases: fetchTagReleasesApi,
};
