/**
 * @file Ce fichier genere le shema utilise par Apollo. C'est ici que les requetes GraphQl sont résolues.
 * @author akka vodol
*/

import knex from '../../db/knex_router';
import { listGroups, listMembers} from '../ldap/ldap_data';
import { makeExecutableSchema } from 'graphql-tools';
import { request } from 'https';

const typeDefs = `
    type Query {
        groups: [Group]!
        group(id : ID) : Group!
    }

    type Group {
        name: String!
        id: ID!
        website: String
        updatedAt: String!
        description: String
        school: String!
    }
`;

const knex_req = {

    getAllVisibleGroups : (user) => {
        let group_ids = listGroups(user.id);
        return knex.select().from('groups').whereIn('id', group_ids);
    },
    
    getGroupIfVisible : (user, id) => {
        return getAllVisibleGroups(user).where('id', args.id);
    }
};

const resolvers = {
    Query: {
        groups: (obj, args, context) => {
            return knex_req.getAllVisibleGroups(context.user);
        },
        group: (obj, args, context) => {
            return knex_req.getGroupIfVisible(context.user, args.id);
        }
    }
};

const schema = makeExecutableSchema({
    typeDefs,
    resolvers
});

export default schema;