<?php

namespace App\Libs\Services;

use App\Libs\Facades\Localization;
use Illuminate\Support\Facades\Cache;
use ShortRedirect;

class RedirectService
{
    public function rebuild()
    {
        $langs = Localization::getSupportedLanguages();
        $redirects = ShortRedirect::full()
            ->where('status', 'published')
            ->get();

        $redirectData = [];
        foreach($redirects as $redirect) {
            $defaultLangRedirect = $redirect->languages->findByLocale('en');
            $redirectData[$defaultLangRedirect->short_uri] = [
                'type' => $redirect->type,
                'target' => $defaultLangRedirect->target_uri
            ];
            if ($redirect->no_langs) {
              continue;
            }
            foreach ($langs as $lang) {
                $langRedirect = $redirect->languages->findByLocale($lang->id);
                $redirectData['/' . $lang->id . $langRedirect->short_uri] = [
                    'type' => $redirect->type,
                    'target' => '/' . $lang->id . $langRedirect->target_uri
                ];
            }
        }
        Cache::put('global_redirects', $redirectData);
        return $redirectData;
    }

    public function getRedirect($uri) {
        try {
            $redirectData = Cache::get('global_redirects');

            if (empty($redirectData)) {
                $redirectData = $this->rebuild();
            }
            if (isset($redirectData[$uri])) {
                return $redirectData[$uri];
            }
        } catch (\Throwable $e) {
            \Log::error($e);
        }
        return null;
    }
}
