import { graphql } from '../api';
import { sitesFragment, releasesFragment } from '../fragments';
import { curateNetwork } from '../curate';

function initNetworksActions(store, _router) {
    async function fetchNetworkBySlug(networkSlug, limit = 100) {
        const { network } = await graphql(`
            query Network(
                $networkSlug: String!
                $limit:Int = 1000,
                $after:Date = "1900-01-01",
                $before:Date = "2100-01-01",
            ) {
                network: networkBySlug(slug: $networkSlug) {
                    id
                    name
                    slug
                    url
                    sites {
                      id
                      name
                      slug
                      url
                      ${releasesFragment}
                      network {
                        id
                        name
                        slug
                        url
                      }
                    }
                }
            }
        `, {
            networkSlug,
            limit,
            after: store.getters.after,
            before: store.getters.before,
        });

        return curateNetwork(network);
    }

    async function fetchNetworks({ _commit }, networkSlug) {
        if (networkSlug) {
            return fetchNetworkBySlug(networkSlug);
        }

        const { networks } = await graphql(`
            query Networks {
                networks {
                    id
                    name
                    slug
                    url
                    ${sitesFragment}
                }
            }
        `);

        return networks.map(network => curateNetwork(network));
    }

    return {
        fetchNetworks,
    };
}

export default initNetworksActions;
