<?php

namespace App\Twig;

use App\Entity\Address;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;

class TwigExtension extends AbstractExtension
{

    public function getFilters()
    {
        return[
            new TwigFilter('meters_to_kilometers',[$this, 'metersToKilometers']),
 //           new TwigFilter('seconds_to_minutes',[$this, 'secondsToMinutes']),
            new TwigFilter('price_format',[PriceFormatResolver::class, 'priceFormat']),
            new TwigFilter('latlng',[$this, 'latLng']),
//            new TwigFilter('mesodd_markup',[MarkupRuntime::class, 'parse']),
            new TwigFilter('floatval', 'floatval'),


            new TwigFilter('body_class', [$this, 'bodyClass']),
            new TwigFilter('route_alias', [$this, 'getRouteByAlias']),
            new TwigFilter('text_type', [$this, 'getTextType']),
        ];
    }

    public function getFunctions()
    {
        return [
            new TwigFunction('mesodd_setting', [SettingResolver::class, 'resolveSetting']),
            /*new TwigFunction('mesodd_maintenance', [MaintenanceResolver::class, 'isEnabled']),
            new TwigFunction('mesodd_banner', [BannerResolver::class, 'isEnabled']),
            new TwigFunction('mesodd_banner_message', [BannerResolver::class, 'getMessage']),
            new TwigFunction('stripe_is_livemode', [StripeResolver::class, 'isLivemode']),
            new TwigFunction('stripe_can_enable_livemode', [StripeResolver::class, 'canEnableLivemode']),
            new TwigFunction('stripe_can_enable_testmode', [StripeResolver::class, 'canEnableTestmode']),*/
        ];
    }

    public function metersToKilometers($meters)
    {
        return sprintf('%s km', number_format($meters / 1000, 2));
    }

    public function secondsToMinutes($seconds)
    {
        return sprintf('%d min', ceil($seconds / 60));
    }

    public function latLng($address)
    {
        if ($address instanceof Address) {
            return [
                $address->getGeo()->getLatitude(),
                $address->getGeo()->getLongitude(),
            ];
        }
    }


    /**
     * @param string $classes
     * @return string
     */
    public function bodyClass($classes = '')
    {
        $classList = [$classes];
        $options = []; //$this->context->getOptions();

        if (isset($options['skin'])) {
            $classList[] = $options['skin'];
        }
        if (isset($options['fixed_layout']) && true == $options['fixed_layout']) {
            $classList[] = 'fixed';
        }
        if (isset($options['boxed_layout']) && true == $options['boxed_layout']) {
            $classList[] = 'layout-boxed';
        }
        if (isset($options['collapsed_sidebar']) && true == $options['collapsed_sidebar']) {
            $classList[] = 'sidebar-collapse';
        }
        if (isset($options['mini_sidebar']) && true == $options['mini_sidebar']) {
            $classList[] = 'sidebar-mini';
        }

        return implode(' ', array_values($classList));
    }

    /**
     * @param string $routeName
     * @return string
     */
    public function getRouteByAlias($routeName)
    {
        return $this->routes[$routeName] ?? $routeName;
    }


}
