<?php

namespace Bastion\Handlers;

use JsonException;
use Openguru\OpenCartFramework\Exceptions\EntityNotFoundException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Openguru\OpenCartFramework\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Openguru\OpenCartFramework\QueryBuilder\Builder;

class FormsHandler
{
    private Builder $builder;

    public function __construct(Builder $builder)
    {
        $this->builder = $builder;
    }

    /**
     * @throws EntityNotFoundException
     * @throws JsonException
     */
    public function getFormByAlias(Request $request): JsonResponse
    {
        $alias = 'checkout';
        //$request->json('alias');
        if (! $alias) {
            return new JsonResponse([
                'error' => 'Form alias is required',
            ], Response::HTTP_UNPROCESSABLE_ENTITY);
        }

        $form = $this->builder->newQuery()
            ->from('telecart_forms')
            ->where('alias', '=', $alias)
            ->firstOrNull();

        if (! $form) {
            throw new EntityNotFoundException("Form with alias `{$alias}` not found");
        }

        $schema = json_decode($form['schema'], true, 512, JSON_THROW_ON_ERROR);

        return new JsonResponse([
            'data' => [
                'alias' => $alias,
                'friendly_name' => $form['friendly_name'],
                'is_custom' => filter_var($form['is_custom'], FILTER_VALIDATE_BOOLEAN),
                'schema' => $schema,
                'created_at' => $form['created_at'],
                'updated_at' => $form['updated_at'],
            ],
        ]);
    }
}
