<?php

namespace App\Providers;

use App\Models\MetaData;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;

class HeaderTagServiceProvider extends ServiceProvider
{
    const PAGE_ROUTES = [
        'home',
        'about',
        'contact',
        'service',
        'service-details',
        'project-category',
        'project-list',
        'project-details',
        'blog',
        'blog-details',
        'help',
        'copyright',
        'privacy-policy',
        'terms-of-service',
    ];

    public function register(): void
    {
        // ...
    }

    public function boot(): void
    {
        View::composer('user.layout', function ($view) {
            $currentRoute = app('router')->currentRouteName();
            $slug = request()->route('slug');
            $model = $this->getCurrentModelName();

            $header_tag = null;
           
            if ($model && in_array($currentRoute, self::PAGE_ROUTES)) {
                $header_tag = $this->getMetaDataForModel($model, $slug);
            }

            $view->with('header_tag', $header_tag);
        });
    }

    private function getMetaDataForModel($model, $slug = null)
    {
        $class = "App\\Models\\$model";
         
        if ($slug) {
            $instance = $class::where('slug', $slug)->first();
            return $instance ? $instance->metaData : null;
        } else {
            $header_tag = MetaData::where('page_type',  $model)->first();
            return $header_tag ?? null;
        }
    }

    public function getCurrentModelName()
    {
        $class = Route::getCurrentRoute()->getAction()['controller'];
        $className = class_basename($class);

        return Str::before($className, 'Controller');
    }
}
