<?php

use FluxCms\Core\Services\CmsContentService;

if (! function_exists('cms')) {
    /**
     * Resolve a CMS content value by dot-notation key.
     *
     * First segment is the group, rest is the key: "welcome.hero.heading"
     * Falls back to __() if no DB entry exists.
     *
     * @param  array<string, string>  $replace
     */
    function cms(string $key, array $replace = [], ?string $locale = null): mixed
    {
        return app(CmsContentService::class)->get($key, $replace, $locale);
    }
}

if (! function_exists('media_url')) {
    /**
     * Resolve a media library filename to its storage URL.
     *
     * Looks up CmsMedia by filename and returns the URL.
     * Falls back to asset('assets/images/...') if not found.
     */
    function media_url(string $filename, ?string $profile = null): string
    {
        static $cache = [];

        $cacheKey = $filename.'|'.($profile ?? '');
        if (isset($cache[$cacheKey])) {
            return $cache[$cacheKey];
        }

        $media = \FluxCms\Core\Models\CmsMedia::where('filename', $filename)->first();

        if (! $media) {
            return $cache[$cacheKey] = asset('assets/images/'.$filename);
        }

        if ($profile && $media->hasConversion($profile)) {
            return $cache[$cacheKey] = $media->getConversionUrl($profile);
        }

        return $cache[$cacheKey] = $media->getUrl();
    }
}

if (! function_exists('cms_media_url')) {
    /**
     * Resolve a CMS content key to a media library URL.
     *
     * The CMS entry stores a CmsMedia filename.
     * Returns the original URL or a conversion URL if a profile is specified.
     */
    function cms_media_url(string $key, ?string $profile = null): string
    {
        $filename = cms($key);

        if (! $filename || ! is_string($filename)) {
            return '';
        }

        $media = \FluxCms\Core\Models\CmsMedia::where('filename', $filename)->first();

        if (! $media) {
            return asset('assets/images/'.$filename);
        }

        if ($profile && $media->hasConversion($profile)) {
            return $media->getConversionUrl($profile);
        }

        return $media->getUrl();
    }
}

if (! function_exists('tcms')) {
    /**
     * CMS content with automatic tooltip replacement.
     *
     * @param  array<string, string>  $replace
     */
    function tcms(string $key, array $replace = [], ?string $locale = null): string
    {
        $text = cms($key, $replace, $locale);

        if (! is_string($text)) {
            $text = (string) $text;
        }

        return \App\Helpers\TooltipHelper::autoTooltip($text);
    }
}

if (! function_exists('t__')) {
    /**
     * Übersetzt einen Schlüssel und ersetzt automatisch alle bekannten Begriffe mit Tooltips
     *
     * @param  string  $key  Der Übersetzungsschlüssel (z.B. 'digitale-transformation.hero.description')
     * @param  array  $replace  Optionale Ersetzungen (z.B. ['name' => 'Max'])
     * @param  string|null  $locale  Optionale Locale (Standard: aktuelle Locale)
     * @return string Der übersetzte Text mit automatischen Tooltips
     */
    function t__(string $key, array $replace = [], ?string $locale = null): string
    {
        // Holt den übersetzten Text
        $text = __($key, $replace, $locale);

        // Wendet automatische Tooltip-Ersetzung an
        return \App\Helpers\TooltipHelper::autoTooltip($text);
    }
}

if (! function_exists('trans_tooltip')) {
    /**
     * Alias für t__() - Übersetzt einen Schlüssel und fügt automatisch Tooltips hinzu
     *
     * @param  string  $key  Der Übersetzungsschlüssel
     * @param  array  $replace  Optionale Ersetzungen
     * @param  string|null  $locale  Optionale Locale
     * @return string Der übersetzte Text mit automatischen Tooltips
     */
    function trans_tooltip(string $key, array $replace = [], ?string $locale = null): string
    {
        return t__($key, $replace, $locale);
    }
}

if (! function_exists('tooltip')) {
    /**
     * Alias für t__() - Übersetzt einen Schlüssel und fügt automatisch Tooltips hinzu
     *
     * @param  string  $key  Der Übersetzungsschlüssel
     * @param  array  $replace  Optionale Ersetzungen
     * @param  string|null  $locale  Optionale Locale
     * @return string Der übersetzte Text mit automatischen Tooltips
     */
    function tooltip(string $text): string
    {
        return \App\Helpers\TooltipHelper::autoTooltip($text);
    }
}
