<?php

namespace app\modules\tag;

use Illuminate\Database\Eloquent\Model;
use itguild\forms\builders\TextInputBuilder;
use kernel\app_modules\tag\models\Tag;
use kernel\helpers\Debug;
use kernel\helpers\Slug;
use kernel\Module;
use kernel\modules\menu\service\MenuService;
use kernel\modules\option\service\OptionService;
use kernel\Request;
use kernel\services\MigrationService;

class TagModule extends Module
{

    public MenuService $menuService;
    public MigrationService $migrationService;
    public function __construct()
    {
        $this->menuService = new MenuService();
        $this->migrationService = new MigrationService();
    }

    /**
     * @throws \Exception
     */
    public function init(): void
    {
        $this->migrationService->runAtPath("{KERNEL_APP_MODULES}/tag/migrations/tag");
//        $this->migrationService->runAtPath("{KERNEL_APP_MODULES}/tag/migrations/tag_entity");

        $this->menuService->createItem([
            "label" => "Тэги",
            "url" => "/admin/tag",
            "slug" => "tag",
        ]);

        $this->menuService->createItem([
            "label" => "Тэги",
            "url" => "/admin/settings/tag",
            "slug" => "tag_settings",
            "parent_slug" => "settings"
        ]);

        OptionService::createFromParams("entity_tag_list", "{}", "Список тегов");
    }

    public function deactivate(): void
    {
        $this->menuService->removeItemBySlug("tag");
        OptionService::removeOptionByKey("entity_tag_list");
    }

    public function formInputs(string $entity, Model $model = null): void
    {
        $tag = Tag::where("entity", $entity)->where("entity_id", $model->id)->first();

        $input = TextInputBuilder::build("tag", [
            'class' => 'form-control',
            'placeholder' => 'Теги',
            'value' => $tag->label ?? ""
        ]);
        $input->setLabel("Теги");
        $input->create()->render();
    }

    public function saveInputs(string $entity, Model $model, Request $request): void
    {
        $tag = new Tag();
        $tag->entity = $entity;
        $tag->entity_id = $model->id;
        $tag->label = $request->post('tag');
        $tag->status = Tag::ACTIVE_STATUS;
        $tag->slug = Slug::createSlug($request->post('tag'), $model);
        $tag->save();
    }

    public function getInputs(string $entity, Model $model)
    {

//        Debug::dd($tag);
    }
}