<?php

namespace Lucent\Svelte;

use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Lucent\Account\AccountService;
use Lucent\Channel\ChannelService;

class  Svelte
{
    public function __construct(
        public ChannelService $channelService,
        public AccountService $accountService
    )
    {
    }

    function render(string $layout, string $view, string $title = "", mixed $data = []): View|Factory
    {

        $context = [];
        $context["user"] = session('user');
        $context["view"] = $view;
        $context["layout"] = $layout;
        $context["title"] = $title;
        $context["data"] = $data;
        $context["channel"] = $this->channelService->channel;
        $context["readableSchemas"] = $this->accountService->currentReadableSchemas();
        $json = json_encode($context);

        $divTag = sprintf('<div class="lucent-component" data-layout="%s"></div>', $layout);
        $jsonTag = sprintf('<script type="application/json" id="json-%s">%s</script>', $layout, $json);

        $svelte = $divTag . $jsonTag;

        return view('lucent::svelte', [
            'svelte' => $svelte,
            'view' => $view,
            'data' => $data,
            'title' => $title,
            'layout' => $layout,
            'channel' => $this->channelService->channel,
        ]);
    }

}

