<?php

  if (!function_exists('translation')) {
    function translation($id, $default = NULL, $parameters = [], $domain = 'messages', $locale = NULL)
    {
      if (!Lang::has($id, $locale) && !empty($default)) {
        return $default;
      } else {
        return trans($id, $parameters, $domain, $locale);
      }
    }
  }

  if (!function_exists('getAvailableLanguages')) {
    function getAvailableLanguages()
    {
      return LaravelLocalization::getSupportedLocales();
    }
  }

  if (!function_exists('getActiveLanguage')) {
    function getActiveLanguage()
    {
      return LaravelLocalization::getCurrentLocale();
    }
  }

  if (!function_exists('getDefaultLanguage')) {
    function getDefaultLanguage()
    {
      return LaravelLocalization::getDefaultLocale();
    }
  }

  if (!function_exists('generateLangRules')) {
    function generateLangRules($rules, $locales, $subField = NULL)
    {
      $langRules = [];
      foreach ($rules as $field => $rule) {
        foreach ($locales as $locale) {
          if ($subField) {
            $langRules[ $field . '.' . $locale . '.' . $subField ] = $rule;
          } else {
            $langRules[ $field . '.' . $locale ] = $rule;
          }
        }
      }

      return $langRules;
    }
  }

  if (!function_exists('generateLangLabels')) {
    function generateLangLabels($field, $label, $locales, $subField = NULL)
    {
      $labels = [];
      foreach ($locales as $locale) {
        if ($subField) {
          $labels[ $field . '.' . $locale . '.' . $subField ] = $label;
        } else {
          $labels[ $field . '.' . $locale ] = $label;
        }
      }

      return $labels;
    }
  }

  if (!function_exists('getLangField')) {
    function getLangField($model, $field, $lang)
    {
      if (!$model || !$model->languages) {
        return '';
      }
      $modelLanguages = $model->languages;
      foreach ($modelLanguages as $modelLanguage) {
        if ($modelLanguage->language_id == $lang) {
          return $modelLanguage->$field;
        }
      }

      return '';
    }
  }

  if (!function_exists('lang_url')) {
    function lang_url($url = NULL, $locale = NULL)
    {
      if (!empty($url) && !starts_with($url, "http")) {
        $baseUrl = url('/');
        if (substr_count($baseUrl, "/") > 2) {
          $url = url($url);
        }
      }


      return LaravelLocalization::getLocalizedURL($locale, $url);
    }
  }

  if (!function_exists('getLangForHeader')) {
    function getLangForHeader()
    {
      // Locales
      $currentLocale = LaravelLocalization::getCurrentLocale();
      $availableLocales = [];
      foreach (LaravelLocalization::getSupportedLocales() as $localeCode => $properties) {
        $localizedUrl = lang_url('/', $localeCode);
        if(!$properties['active']) {
          continue;
        }
        $name = $properties['native'];
        $locale = new stdClass();
        $locale->localeCode = $localeCode;
        $locale->localizedUrl = $localizedUrl;
        $locale->name = $name;
        $locale->active = $localeCode == $currentLocale ? TRUE : FALSE;
        array_push($availableLocales, $locale);
      }

      return $availableLocales;
    }
  }

  if (!function_exists('getActiveLangForHeader')) {
    function getActiveLangForHeader()
    {
      // Locales
      $currentLocale = LaravelLocalization::getCurrentLocale();
      foreach (LaravelLocalization::getSupportedLocales() as $localeCode => $properties) {
        if ($localeCode == $currentLocale) {
          $localizedUrl = lang_url('/', $localeCode);
          $name = $properties['native'];
          $locale = new stdClass();
          $locale->localeCode = $localeCode;
          $locale->localizedUrl = $localizedUrl;
          $locale->name = $name;
          $locale->active = $localeCode == $currentLocale ? TRUE : FALSE;

          return $locale;
        }
      }
    }
  }
