// Server API makes it possible to hook into various parts of Gridsome
// on server-side and add custom data to the GraphQL data layer.
// Learn more: https://gridsome.org/docs/server-api/

// Changes here require a server restart.
// To restart press CTRL + C in terminal and run `gridsome develop`

var private =  process.env.SHOWPRIVATE
if (private == "true")
  private = null
else if(private == "false")
  private = 1

module.exports = function (api) {
  api.loadSource(({
    addCollection
  }) => {
    // Use the Data Store API here: https://gridsome.org/docs/data-store-api/
  })

  api.createPages(({
    createPage
  }) => {
    // Use the Pages API here: https://gridsome.org/docs/pages-api/
  })

  api.onCreateNode(options => {
    if (options.internal.typeName === 'Blog') {

      options.tags = (typeof options.tags === 'string') ? options.tags.split(',').map(string => string.trim()) : options.tags;
      options.author = (typeof options.author === 'string') ? options.author.split(',').map(string => string.trim()) : options.author;
      return {
        ...options
      };
    }

    if (options.internal.typeName === 'Project') {
      options.tags = (typeof options.tags === 'string') ? options.tags.split(',').map(string => string.trim()) : options.tags;
      options.countries = (typeof options.countries === 'string') ? options.countries.split(',').map(string => string.trim()) : options.countries;
      options.cities = (typeof options.cities === 'string') ? options.cities.split(',').map(string => string.trim()) : options.cities;
      options.members = (typeof options.members === 'string') ? options.members.split(',').map(string => string.trim()) : options.members;
      options.author = (typeof options.author === 'string') ? options.author.split(',').map(string => string.trim()) : options.author;
      return {
        ...options
      };
    }


    if (options.internal.typeName === 'Person') {
      options.project_ids = (typeof options.project_ids === 'string') ? options.project_ids.split(',').map(string => string.trim()) : options.project_ids;
      options.memberships = (typeof options.memberships === 'string') ? options.memberships.split(',').map(string => string.trim()) : options.memberships;
      options.countries = (typeof options.countries === 'string') ? options.countries.split(',').map(string => string.trim()) : options.countries;
      options.cities = (typeof options.cities === 'string') ? options.cities.split(',').map(string => string.trim()) : options.cities;
      return {
        ...options
      };
    }
  })

    api.createPages(({ createPage }) => {
      createPage({
        path: '/people',
        component: './src/templates/People.vue',
        context: {
          private: private
        }
      })
    })

    api.createPages(({ createPage }) => {
      createPage({
        path: '/search',
        component: './src/templates/Search.vue',
        context: {
          private: private
        }
      })
    })

    api.createPages(({ createPage }) => {
      createPage({
        path: '/projects',
        component: './src/templates/Projects.vue',
        context: {
          private: private
        }
      })
    })

    api.createPages(({ createPage }) => {
      createPage({
        path: '/overview',
        component: './src/templates/Overview.vue',
        context: {
          private: private
        }
      })
    })

    api.createPages(async ({
      graphql,
      createPage
    }) => {
      // Use the Pages API here: https://gridsome.org/docs/pages-api
      const {
        data
      } = await graphql(`{
      allBlog {
        edges {
          previous {
            id
          }
          next {
            id
          }
          node {
            id
            path
          }
        }
      }
    }
    `);

      data.allBlog.edges.forEach(function (element) {
        createPage({
          path: element.node.path,
          component: './src/templates/BlogPost.vue',
          context: {
            previousElement: (element.previous) ? element.previous.id : '##empty##',
            nextElement: (element.next) ? element.next.id : '##empty##',
            id: element.node.id
          }
        });

      });

    });
}