<?php

namespace Hura8\Components\Template\Controller;


/**
 * Before attempting to make new filter, see built-in filters: https://shopify.github.io/liquid/
 */
class TemplateFilter
{

    /**
     *
     * @param array $array
     *
     * @return string
     */
    public static function to_json(array $array) {
        return \json_encode($array);
    }


    /**
     * create array of ['key' => '', 'value' => ] from [key1 => value1, key2=>value2, ...]
     *
     * @param array $key_values [key1 => value1, key2=>value2]
     *
     * @return array [['key' => 'key1', 'value' => value1], ['key' => 'key2', 'value' => value2]]
     */
    public static function to_array(array $key_values) {
        $result = [];
        foreach ($key_values as $key => $value) {
            $result[] = [
                'key' => $key,
                'value' => $value,
            ];
        }

        return $result;
    }


    /**
     * split a s by line to create array
     *
     * @param string $txt
     *
     * @return array
     */
    public static function get_line($txt) {

        if(is_array($txt)) {
            return $txt;
        }

        $txt = trim($txt);
        if( ! $txt ) return [];

        return preg_split("/\n/", $txt);
    }

    /**
     * Implement strlen
     *
     * @param string $str
     *
     * @return int
     */
    public static function length($str) {
        return strlen(trim($str));
    }


    /**
     * Make number easier to read: 1000 -> 1.000
     *
     * @param string $number
     *
     * @return string
     */
    public static function format_number($number) {
        if(!$number) return '';
        $number = floatval($number);

        $number = number_format($number, 0, ",", "."); //Vietnamese format with decimals by a coma

        return $number;
    }

    public static function format_price($p_price, $currency = ''){
        if(!$p_price) return '';
        if(!$currency) $currency = (defined("DEFAULT_CURRENCY")) ? DEFAULT_CURRENCY : "vnd";
        //if(is_string($p_price)) return 0;
        if($currency == 'usd') {
            return number_format($p_price,2,".",",");
        }else {
            return number_format($p_price,0,",",".");
        }
    }

    public static function global_asset_url($file_name = '')
    {
        return GLOBAL_ASSETS_PATH . $file_name;
    }

    /**
     *
     * Description: get the shop's full asset url for template's images/js/css
     *
     * //Returns the URL of a file in the "assets" folder of a theme.
    // {{ 'shop.css' | asset_url : 'arg1', 'arg2' ...}} -> //cdn.shopify.com/s/files/1/0087/0462/t/394/assets/shop.css?28253
     *
     * @param string $file_name
     *
     * @return string
     */
    public static function asset_url($file_name = '')
    {
        if( !$file_name ) return '';

        $file_ext  = strtolower(strrchr($file_name, "."));

        // script tags
        if(in_array($file_ext, ['.js', '.css'])) return TEMPLATE_ASSET_SCRIPT . $file_name;

        // default image
        return TEMPLATE_ASSET_IMAGE . $file_name;
    }


    /**
     *
     * Description: construct a full html tag for images/js/css file
     *
     * @param string $file_path domain.com/static/style.css?v=3.1.1
     *
     * @return string
     */
    public static function script_tag($file_path) {
        if( ! $file_path ) return '';

        //check for ?
        if(strpos($file_path, "?") !== false) {
            $file_ext  = str_replace(strrchr($file_path, "?"), "", $file_path);
            $file_ext  = strtolower(strrchr($file_ext, "."));
        } else {
            $file_ext  = strtolower(strrchr($file_path, "."));
        }

        $tag_config = [
            ".css"  => "<link rel=\"stylesheet\" href=\"".$file_path."\" type=\"text/css\" />",
            ".js"   => "<script src=\"".$file_path."\"></script>",
            ".jpg"  => "<img src=\"".$file_path."\" alt=\"n\"/>",
            ".jpeg"  => "<img src=\"".$file_path."\" alt=\"\"/>",
            ".gif"  => "<img src=\"".$file_path."\" alt=\"\"/>",
            ".png"  => "<img src=\"".$file_path."\" alt=\"\"/>",
        ];

        return (isset($tag_config[$file_ext])) ? $tag_config[$file_ext] : '';
    }

    /**
     * {{ product_info.main_image | img_url: '300x300' }} => https://cdn.shopify.com/s/files/1/1183/1048/products/boat-shoes_300x300.jpeg?1459175177
     * @param string $full_path
     * @param string $modifier
     * $modifier:
     * - must be in format: NumberxNumber or Numberx where Number must within 10 -> 9999
     * - or be one of these: small | medium | large
     * @return string
     */
    public static function img_url($full_path, $modifier)
    {
        $clean_modifier = ($modifier) ? trim($modifier) : "";

        // verify $modifier
        // must be in format: NumberxNumber or Numberx where Number must within 10 -> 9999
        if($clean_modifier
            && !preg_match("/^[0-9]{2,4}x([0-9]{2,4})?$/i", $clean_modifier)
            && !in_array($clean_modifier, ["small", "medium", "large"])
        ) {
            $clean_modifier = "";
        }

        // return if no valid modifier
        if( ! $clean_modifier ) {
            return $full_path;
        }

        $last_dot_position = strrpos($full_path, ".");
        if( ! $last_dot_position ) return $full_path . $clean_modifier;

        return join("", [
            substr($full_path, 0, $last_dot_position),
            "_",
            $clean_modifier,
            substr($full_path, $last_dot_position)
        ]);
    }

    /**
     * //Returns the URL of a file in the Files page of the admin.
    //{{ 'size-chart.pdf' | file_url }} -> //cdn.shopify.com/s/files/1/0087/0462/files/size-chart.pdf?28261
     *
     * @param string $input
     * @param string $string
     *
     * @return string
     */
    public static function file_url($input, $string)
    {
        return strtoupper($input) . " = " . $string;
    }

    /**
     * //Returns the asset URL of an image in the Files page of the admin. file_img_url accepts an image size parameter.
    //{{ 'logo.png' | file_img_url: '1024x768' }} -> //cdn.shopify.com/s/files/1/0246/0527/files/logo_1024x768.png?42
     *
     * @param string $input
     * @param string $string
     *
     * @return string
     */
    public static function file_img_url($input, $string)
    {
        return '';
    }


    /**
     * Show all content of a variable, useful for template development
     *
     * @param string
     *
     * @return string
     */
    public static function print_r($input)
    {
        @ob_start();
        print_r($input);
        $content = ob_get_contents();
        @ob_end_clean();

        return join("\r", ['<!-- print_r debug content: ', $content,  '-->']) ;
    }

    /**
     * Show all content of a variable, useful for template development
     *
     * @param string
     *
     * @return string
     */
    public static function show_var($input)
    {
        @ob_start();
        print_r($input);
        $content = ob_get_contents();
        @ob_end_clean();

        return join("\r", ['<textarea cols="80" rows="20">', $content,  '</textarea>']) ;
    }
}
