import { Args, Parent, Query, ResolveField, Resolver } from '@nestjs/graphql';
import { Agent } from './models/agent.model';
import { PrismaService } from '../prisma/prisma.service';
import { GraphQLString } from 'graphql';
import { NotFoundException } from '@nestjs/common';

@Resolver(() => Agent)
export class AgentResolver {
    constructor(private prismaService: PrismaService) {}

    @Query(() => [Agent])
    listAgents() {
        return this.prismaService.agent.findMany({
            include: {
                unlocks: true,
                entries: true,
            },
        });
    }

    @Query(() => Agent)
    async getAgent(
        @Args({ name: 'code', type: () => GraphQLString }) code: string,
    ) {
        const agent = await this.prismaService.agent.findFirst({
            where: { slug: code },
        });

        if (!agent) throw new NotFoundException();

        return agent;
    }

    @ResolveField('unlocks')
    async unlocks(@Parent() entry: Agent) {
        const result = await this.prismaService.agent.findFirst({
            where: { id: entry.id },
            select: { unlocks: true },
        });

        return result.unlocks;
    }

    @ResolveField('entries')
    async entries(@Parent() entry: Agent) {
        const result = await this.prismaService.agent.findFirst({
            where: { id: entry.id },
            select: { entries: true },
        });

        return result.entries;
    }
}