<?php
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;

require "./queries/skills.php";
require "./queries/blogPost.php";
require "./queries/comments.php";
require "./queries/mailAddress.php";
require "./queries/ebayKleinanzeigen.php";
require "./queries/imgproxy.php";


$queryType = new ObjectType([
    'name' => 'Query',
    'fields' => [
        'sitekey' => [
            'type' => Type::string(),
            'resolve' => fn ($rootValue, $args) => $sitekey,
        ],
        'mailAddress' => [
            'type' => Type::string(),
            "args" => [
                "hCaptchaResponse" => Type::string()
            ],
            'resolve' => fn ($rootValue, $args) => mailAddress($args["hCaptchaResponse"]),
        ],
        'skills' => [
            'type' => Type::listOf(Type::string()),
            'resolve' => fn ($rootValue, $args) => getSkills(),
        ],
        'blogPost' => [
            "type" => $blogPostFields,
            'args' => [
                'id' => Type::nonNull(Type::string()),
            ],
            'resolve' => fn ($rootValue, $args) => blogPost($args["id"], $rootValue["db"]),
        ],
        'blogPosts' => [
            "type" => Type::listOf($blogPostFields),
            "args" => [
                "count" => Type::nonNull(Type::int()),
                "contentLength" => [
                    "type" => Type::int(),
                    "defaultValue" => null
                ]
                
            ],
            'resolve' => fn ($rootValue, $args) => blogPosts($args["count"], $args["contentLength"], $rootValue["db"]),
        ],
        'comments' => [
            "type" => Type::listOf($commentField),
            "args" => [
                "article" => Type::nonNull(Type::string()),
            ],
            'resolve' => fn ($rootValue, $args) => comments($args["article"], $rootValue["db"]),
        ],
        'ebayKleinanzeigen' => [
            "type" => $ebayKleinanzeigenFields,
            "args" => [
                "imageCount" => [
                    "type" => Type::int(),
                    "defaultValue" => 0
                ]
            ],
            'resolve' => fn ($rootValue, $args) => ebayKleinanzeigen($args["imageCount"]),
        ],
        'imgproxy' => [
            "type" => Type::string(),
            "args" => [
                "url" => Type::nonNull(Type::string()),
            ],
            'resolve' => fn ($rootValue, $args) => imgproxy($args["url"]),
        ]

    ]
]);

$mutationType = new ObjectType([
    'name' => 'Mutation',
    'fields' => [
        "comment" => [
            "type" => Type::string(),
            "args" => [
                "article" => Type::string(),
                "name" => Type::string(),
                "email" => Type::string(),
                "comment" => Type::string(),
                "hCaptchaResponse" => Type::string()
            ],
            'resolve' => fn ($rootValue, $args) => newComment($rootValue["db"], $args["article"], $args["name"], $args["email"], $args["comment"], $args["hCaptchaResponse"]),
        ],
    ]
]);
