<?php
/**
*
* @package phpBB Extension - eparsons/restapi
* @copyright (c) 2018 Eric Parsons, (copyleft) 2023 Tomáš Valenta
* @license https://opensource.org/licenses/GPL-2.0 GNU General Public License v2
*
*/
namespace eparsons\restapi\controller\forums;

use eparsons\restapi\ErrorResponse;
use eparsons\restapi\Validation;
use phpbb\config\config;
use phpbb\user;
use phpbb\auth;
use Symfony\Component\HttpFoundation\JsonResponse;

if (!defined('IN_PHPBB'))
{
    exit();
}

class Forums
{
    /**
    * phpBB user
    *
    * @var user
    */
    private $user;

    /**
    * REST API validator
    *
    * @var Validation
    */
    private $validation;

    /**
     * Constructor
     *
     * @param user $user
     * @param Validation $validation
     */
    public function __construct(user $user, Validation $validation)
    {
        $this->user = $user;
        $this->validation = $validation;
    }

    /**
    * Handler for /api/forums/{forumId}/threads GET requests
    *
    * @return JsonResponse A Symfony Response object
    */
    public function viewThreads($forumId)
    {
        $errorResponse = $this->validation->ValidateRequest('GET');
        if ($errorResponse != null)
        {
            return $errorResponse;
        }

        global $db, $phpbb_container, $auth;

        if (
            !$auth->acl_gets('f_list', 'f_list_topics', 'f_read', $forumId)
            || (
                $forum_data['forum_type'] == FORUM_LINK && $forum_data['forum_link']
                && !$auth->acl_get('f_read', $forumId)
            )
        ) {
            return new ErrorResponse(
                "NotFound",
                "This forum does not exist.",
                404
            );
        }

        $phpbb_content_visibility = $phpbb_container->get('content.visibility');

        $threads_query = $db->sql_query(
            'SELECT *
            FROM ' . TOPICS_TABLE . ' 
            WHERE
                forum_id = ' . $forumId . '
                AND ' . $phpbb_content_visibility->get_visibility_sql('topic', $forumId) . '
            ORDER BY topic_id DESC'
        );

        $topics = array();

        while ($row = $db->sql_fetchrow($threads_query))
        {
            $topic = array();
            $topic["id"] = $row["topic_id"];
            $topic["title"] = $row["topic_title"];
            $topic["time"] = (int)$row["topic_time"];

            $first_post_query = $db->sql_query(
                'SELECT *
                FROM ' . POSTS_TABLE . ' 
                WHERE
                    topic_id = ' . $row["topic_id"] . '
                    AND ' . $phpbb_content_visibility->get_visibility_sql('post', $forumId) . '
                ORDER BY post_id DESC'
            );

            while ($first_post_row = $db->sql_fetchrow($first_post_query))
            {
                $topic["content"] = $first_post_row["post_text"];
            }

            array_push($topics, $topic);
        }

        return new JsonResponse($topics, 200);
    }
}