// import {makeExecutableSchema} from '@graphql-tools/schema';
// import {addMocksToSchema} from '@graphql-tools/mock';
// import {graphql} from 'graphql';

// const schemaString = '';

interface GraphQLBody {
  operationName: string;
}

interface CypressAliasRequest extends Request {
  alias?: string;
}

interface GraphQLRequestPayload {
  operationName: string;
  query: string;
  variables: any;
}

const isGraphQLBody = (body: any): body is GraphQLBody => {
  return (body as GraphQLBody).operationName !== undefined;
};

export const hasOperationName = (req: Request, operationName: string) => {
  const { body } = req;
  return isGraphQLBody(body) && body.operationName === operationName;
};

export const aliasQuery = (req: CypressAliasRequest, operationName: string) => {
  if (hasOperationName(req, operationName)) {
    req.alias = `gql${operationName}Query`;
  }
};

export const aliasMutation = (req: CypressAliasRequest, operationName: string) => {
  if (hasOperationName(req, operationName)) {
    req.alias = `gql${operationName}Mutation`;
  }
};

// export const makeRequest = (req: CypressAliasRequest, alias: string) => {
//   const schema = makeExecutableSchema({typeDefs: schemaString});
//   const schemaWithMocks = addMocksToSchema({schema});
//
//   const {body} = req;
//
//   o;
//   const paylaod = JSON.parse(body);
//
//   return graphql(schemaWithMocks, query)
//     .then(result => result);
// };
