import graphene
from graphene_django.types import DjangoObjectType

from cookbook.recipes.models import Recipe, RecipeIngredient


class RecipeType(DjangoObjectType):
    class Meta:
        model = Recipe


class RecipeIngredientType(DjangoObjectType):
    class Meta:
        model = RecipeIngredient


class Query(object):
    recipe = graphene.Field(RecipeType,
                            id=graphene.Int(),
                            title=graphene.String())
    all_recipes = graphene.List(RecipeType)

    recipeingredient = graphene.Field(RecipeIngredientType,
                                      id=graphene.Int())
    all_recipeingredients = graphene.List(RecipeIngredientType)

    def resolve_recipe(self, args, context, info):
        id = args.get('id')
        title = args.get('title')

        if id is not None:
            return Recipe.objects.get(pk=id)

        if title is not None:
            return Recipe.objects.get(title=title)

        return None

    def resolve_recipeingredient(self, args, context, info):
        id = args.get('id')

        if id is not None:
            return RecipeIngredient.objects.get(pk=id)

        return None

    def resolve_all_recipes(self, args, context, info):
        return Recipe.objects.all()

    def resolve_all_recipeingredients(self, args, context, info):
        related = ['recipe', 'ingredient']
        return RecipeIngredient.objects.select_related(*related).all()