<?php
/**
 * Blossom Shop Typography Related Functions
 *
 * @package Blossom_Shop
 */

if( ! function_exists( 'blossom_shop_fonts_url' ) ):
/**
 * 
*/ 
function blossom_shop_fonts_url(){
    $fonts_url = '';
    
    $primary_font       = get_theme_mod( 'primary_font', 'Nunito Sans' );
    $ig_primary_font    = blossom_shop_is_google_font( $primary_font );    
    $secondary_font     = get_theme_mod( 'secondary_font', 'Cormorant' );
    $ig_secondary_font  = blossom_shop_is_google_font( $secondary_font );    
    $site_title_font    = get_theme_mod( 'site_title_font', array( 'font-family'=>'Cormorant', 'variant'=>'regular' ) );
    $ig_site_title_font = blossom_shop_is_google_font( $site_title_font['font-family'] );
        
    /* Translators: If there are characters in your language that are not
    * supported by respective fonts, translate this to 'off'. Do not translate
    * into your own language.
    */
    $primary    = _x( 'on', 'Primary Font: on or off', 'blossom-shop' );
    $secondary  = _x( 'on', 'Secondary Font: on or off', 'blossom-shop' );
    $site_title = _x( 'on', 'Site Title Font: on or off', 'blossom-shop' );
    
    
    if ( 'off' !== $primary || 'off' !== $secondary || 'off' !== $site_title ) {
        
        $font_families = array();
     
        if ( 'off' !== $primary && $ig_primary_font ) {
            $primary_variant = blossom_shop_check_varient( $primary_font, 'regular', true );
            if( $primary_variant ){
                $primary_var = ':' . $primary_variant;
            }else{
                $primary_var = '';    
            }            
            $font_families[] = $primary_font . $primary_var;
        }
         
        if ( 'off' !== $secondary && $ig_secondary_font ) {
            $secondary_variant = blossom_shop_check_varient( $secondary_font, 'regular', true );
            if( $secondary_variant ){
                $secondary_var = ':' . $secondary_variant;    
            }else{
                $secondary_var = '';
            }
            $font_families[] = $secondary_font . $secondary_var;
        }
        
        if ( 'off' !== $site_title && $ig_site_title_font ) {
            
            if( ! empty( $site_title_font['variant'] ) ){
                $site_title_var = ':' . blossom_shop_check_varient( $site_title_font['font-family'], $site_title_font['variant'] );    
            }else{
                $site_title_var = '';
            }
            $font_families[] = $site_title_font['font-family'] . $site_title_var;
        }
        
        $font_families = array_diff( array_unique( $font_families ), array('') );
        
        $query_args = array(
            'family' => urlencode( implode( '|', $font_families ) ),            
        );
        
        $fonts_url = add_query_arg( $query_args, 'https://fonts.googleapis.com/css' );
    }

    if( get_theme_mod( 'ed_localgoogle_fonts', false ) ) {
        $fonts_url = blossom_shop_get_webfont_url( add_query_arg( $query_args, 'https://fonts.googleapis.com/css' ) );
    }
     
    return esc_url( $fonts_url );
}
endif;

if( ! function_exists( 'blossom_shop_get_google_fonts' ) ) :
/**
 * Get Google Fonts
*/
function blossom_shop_get_google_fonts(){
    $fonts = include wp_normalize_path( get_template_directory() . '/inc/custom-controls/typography/webfonts.php' );
    $google_fonts = array();
    if ( is_array( $fonts ) ) {
        foreach ( $fonts['items'] as $font ) {
            $google_fonts[ $font['family'] ] = array(
                'variants' => $font['variants'],
            );
        }
    }    
    return $google_fonts;
}
endif;

if( ! function_exists( 'blossom_shop_get_websafe_font' ) ) :
/**
 * Function listing WebSafe Fonts and its attributes
*/
function blossom_shop_get_websafe_font(){
    $standard_fonts = array(
        'georgia-serif' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => 'Georgia, serif',
        ),
        'palatino-serif' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => '"Palatino Linotype", "Book Antiqua", Palatino, serif',
        ),
        'times-serif' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => '"Times New Roman", Times, serif',
        ),
        'arial-helvetica' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => 'Arial, Helvetica, sans-serif',
        ),
        'arial-gadget' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => '"Arial Black", Gadget, sans-serif',
        ),
        'comic-cursive' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => '"Comic Sans MS", cursive, sans-serif',
        ),
        'impact-charcoal'  => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => 'Impact, Charcoal, sans-serif',
        ),
        'lucida' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => '"Lucida Sans Unicode", "Lucida Grande", sans-serif',
        ),
        'tahoma-geneva' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => 'Tahoma, Geneva, sans-serif',
        ),
        'trebuchet-helvetica' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => '"Trebuchet MS", Helvetica, sans-serif',
        ),
        'verdana-geneva'  => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => 'Verdana, Geneva, sans-serif',
        ),
        'courier' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => '"Courier New", Courier, monospace',
        ),
        'lucida-monaco' => array(
            'variants' => array( 'regular', 'italic', '700', '700italic' ),
            'fonts' => '"Lucida Console", Monaco, monospace',
        )
    );
    
    return apply_filters( 'blossom_shop_standard_fonts', $standard_fonts );
}
endif;

if( ! function_exists( 'blossom_shop_check_varient' ) ) :
/**
 * Checks for matched varients in google fonts for typography fields
*/
function blossom_shop_check_varient( $font_family = 'serif', $font_variants = 'regular', $body = false ){
    $variant = '';
    $var     = array();
    $google_fonts  = blossom_shop_get_google_fonts(); //Google Fonts
    $websafe_fonts = blossom_shop_get_websafe_font(); //Standard Web Safe Fonts
    
    if( array_key_exists( $font_family, $google_fonts ) ){
        $variants = $google_fonts[ $font_family ][ 'variants' ];
        if( in_array( $font_variants, $variants ) ){
            if( $body ){ //LOAD ALL VARIANTS FOR BODY FONT
                foreach( $variants as $v ){
                    $var[] = $v;
                }
                $variant = implode( ',', $var );
            }else{                
                $variant = $font_variants;
            }
        }else{
            $variant = 'regular';
        }        
    }else{ //Standard Web Safe Fonts
        if( array_key_exists( $font_family, $websafe_fonts ) ){
            $variants = $websafe_fonts[ $font_family ][ 'variants' ];
            if( in_array( $font_variants, $variants ) ){
                if( $body ){ //LOAD ALL VARIANTS FOR BODY FONT
                    foreach( $variants as $v ){
                        $var[] = $v;
                    }
                    $variant = implode( ',', $var );
                }else{  
                    $variant = $font_variants;
                }
            }else{
                $variant = 'regular';
            }    
        }
    }
    return $variant;
}
endif;

/**
 * Returns font weight and font style to use in dynamic styles.
*/
function blossom_shop_get_css_variant( $font_variant ){
    $v_array = array(
        '100'       => array(
            'weight'    => '100',
            'style'     => 'normal'
            ),
        '100italic' => array(
            'weight'    => '100',
            'style'     => 'italic'
            ),
        '200'       => array(
            'weight'    => '200',
            'style'     => 'normal'
            ),
        '200italic' => array(
            'weight'    => '200',
            'style'     => 'italic'
            ),
        '300'       => array(
            'weight'    => '300',
            'style'     => 'normal'
            ),
        '300italic' => array(
            'weight'    => '300',
            'style'     => 'italic'
            ),
        'regular'   => array(
            'weight'    => '400',
            'style'     => 'normal'
            ),
        'italic'    => array(
            'weight'    => '400',
            'style'     => 'italic'
            ),
        '500'       => array(
            'weight'    => '500',
            'style'     => 'normal'
            ),
        '500italic' => array(
            'weight'    => '500',
            'style'     => 'italic'
            ),
        '600'       => array(
            'weight'    => '600',
            'style'     => 'normal'
            ),
        '600italic' => array(
            'weight'    => '600',
            'style'     => 'italic'
            ),
        '700'       => array(
            'weight'    => '700',
            'style'     => 'normal'
            ),
        '700italic' => array(
            'weight'    => '700',
            'style'     => 'italic'
            ),
        '800'       => array(
            'weight'    => '800',
            'style'     => 'normal'
            ),
        '800italic' => array(
            'weight'    => '800',
            'style'     => 'italic'
            ),
        '900'       => array(
            'weight'    => '900',
            'style'     => 'normal'
            ),
        '900italic' => array(
            'weight'    => '900',
            'style'     => 'italic'
            ),
    );
    
    if( array_key_exists( $font_variant, $v_array ) ){
        return $v_array[ $font_variant ];
    }
}

/**
 * Function to check if it's a google font
*/
function blossom_shop_is_google_font( $font ){
    $return = false;
    $websafe_fonts = blossom_shop_get_websafe_font();
    if( $font ){
        if( array_key_exists( $font, $websafe_fonts ) ){
            //Web Safe Font
            $return = false;
        }else{
            //Google Font
            $return = true;
        }
    }
    return $return; 
}

/**
 * Function to get valid font, weight and style
*/
function blossom_shop_get_fonts( $font_family, $font_variant ){
    
    $fonts = array();
    $websafe_fonts = blossom_shop_get_websafe_font(); //Web Safe Font
    
    if( $font_family ){
        if( blossom_shop_is_google_font( $font_family ) ){
            $fonts['font'] = esc_attr( $font_family ); //Google Font
            if( $font_variant ){
                $weight_style    = blossom_shop_get_css_variant( blossom_shop_check_varient( $font_family, $font_variant ) );
                $fonts['weight'] = $weight_style['weight'];
                $fonts['style']  = $weight_style['style'];
            }else{
                $fonts['weight'] = '400';
                $fonts['style']  = 'normal';
            }
        }else{
            if( array_key_exists( $font_family, $websafe_fonts ) ){
                $fonts['font'] = $websafe_fonts[ $font_family ]['fonts']; //Web Safe Font
                if( $font_variant ){
                    $weight_style    = blossom_shop_get_css_variant( blossom_shop_check_varient( $font_family, $font_variant ) );
                    $fonts['weight'] = $weight_style['weight'];
                    $fonts['style']  = $weight_style['style'];
                }else{
                    $fonts['weight'] = '400';
                    $fonts['style']  = 'normal';
                }
            }
        }   
    }else{
        $fonts['font']   = '"Times New Roman", Times, serif';
        $fonts['weight'] = '400';
        $fonts['style']  = 'normal';
    }
    
    return $fonts;
}

if( ! function_exists( 'blossom_shop_get_all_fonts' ) ) :
/**
 * Return Web safe font and google font without variants
*/
function blossom_shop_get_all_fonts(){
    $google = array();        
    $standard = apply_filters( 'blossom_shop_standard_font', array(
        'georgia-serif'       => __( 'Georgia', 'blossom-shop' ),
        'palatino-serif'      => __( 'Palatino Linotype, Book Antiqua, Palatino', 'blossom-shop' ),
        'times-serif'         => __( 'Times New Roman, Times', 'blossom-shop' ),
        'arial-helvetica'     => __( 'Arial, Helvetica', 'blossom-shop' ),
        'arial-gadget'        => __( 'Arial Black, Gadget', 'blossom-shop' ),
        'comic-cursive'       => __( 'Comic Sans MS, cursive', 'blossom-shop' ),
        'impact-charcoal'     => __( 'Impact, Charcoal', 'blossom-shop' ),
        'lucida'              => __( 'Lucida Sans Unicode, Lucida Grande', 'blossom-shop' ),
        'tahoma-geneva'       => __( 'Tahoma, Geneva', 'blossom-shop' ),
        'trebuchet-helvetica' => __( 'Trebuchet MS, Helvetica', 'blossom-shop' ),
        'verdana-geneva'      => __( 'Verdana, Geneva', 'blossom-shop' ),
        'courier'             => __( 'Courier New, Courier', 'blossom-shop' ),
        'lucida-monaco'       => __( 'Lucida Console, Monaco', 'blossom-shop' ),
    ) );
    
    $fonts = include wp_normalize_path( get_template_directory() . '/inc/custom-controls/typography/webfonts.php' );
    
    foreach( $fonts['items'] as $font ){
        $google[$font['family']] = $font['family'];
    }
    $all_fonts = array_merge( $standard, $google );
    return $all_fonts; 
}
endif;