<?php

namespace App\Controller;

use App\Message\TestJob;
use App\Model\Product;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Routing\Attribute\Route;

class TestController extends AbstractController
{
    private MessageBusInterface $bus;

    public function __construct()
    {

    }
    #[Route('/', name: 'app_home')]
    public function home(): JsonResponse
    {
        return $this->json(['error' => 'Page not found'], 404);
    }

    #[Route('/test/', name: 'app_test')]
    public function index(Request $request, Product $product): JsonResponse
    {
        $urlToTest = $request->query->get('testSheetUrl');
        if ($urlToTest != null) {
            // Send the response immediately
            $response = $this->json(['status' => 'Processing started'], 200);
            $response->send();
            // this is a workaround for returning the response immediately, it should be handled by async job
            if (function_exists('fastcgi_finish_request')) {
                fastcgi_finish_request();
            }

            // Continue processing in the background
            $product->getCsvParser()->setSpreadsheetUrl($urlToTest);
            $product->runTests();

            return $response;
        }
        return $this->json(['error' => 'There is nothing here'], 404);
    }

    /**
     * For async job, not finished, disabled route by comment in 45
     * @param Request $request
     * @return JsonResponse
     */
    /*#[Route('/requestTest/', name: 'app_test_url')]*/
    public function requestTest(Request $request): JsonResponse
    {
        $urlToTest = $request->query->get('testSheetUrl');
        if ($urlToTest !== null) {
            $this->bus->dispatch(new TestJob($urlToTest));
            return $this->json(['status' => 'Job received'], 200);
        }
        return $this->json(['error' => 'There is nothing here'], 404);
    }
}
