<?php
namespace Roots\Sage\Acf;

use Roots\Sage\Assets\JsonManifest;

function override_colors($post_id)
{
	if ('options' === $post_id) {

        $files = array_diff(scandir(get_template_directory() . '/color-overrides'), array('..', '.'));

        foreach($files as $file) {
            $overridden_css[str_replace('.css', '', $file)] = JsonManifest::getFile(get_template_directory() . '/color-overrides/'.$file);
        }

		$color_fields = [
			'brand_primary' => 'field_569406110a6df',
			'brand_primary_hover' => 'field_5694548ca61ad',
			'brand_primary_hover_active' => 'field_569709e85e9f9',
			'brand_primary_hover_link' => 'field_5697060d54d2e',
			'background_primary' => 'field_5694253da6ff5',
			'background_primary_lighter' => 'field_569424a1385a1',
			'background_primary_lightest' => 'field_5694245e385a0',
			'validation_error_color' => 'field_569412c7218bf',
			'validation_error_bg_color' => 'field_56941341218c0',
            'footer_background_color' => 'field_56ebdbe2db848',
            'footer_menu_active' => 'field_56ef84c1b236d',
            'footer_menu_inactive' => 'field_56ef84f4b236e',
            'footer_titles' => 'field_56f094725b74d',
            'footer_icons' => 'field_56f0950b5b74e',
            'footer_copyrighttext' => 'field_56f097601381a',
            'header_menu_active_bg' => 'field_56f0ad3b96f74',
            'header_menu_inactive_bg' => 'field_56f0ad7696f75',
            'header_menu_active_font' => 'field_56f11f7636613',
            'header_menu_inactive_font' => 'field_56f11f13ee237',
            'header_background_color' => 'field_56f273352b8f6',
            'header_titles' => 'field_56f12879e949f',
            'header_description' => 'field_56f128d8e94a0',
            'services_title_background' => 'field_56f5264bf8f97',
            'services_title_background_active' => 'field_56f52702f8f99',
            'services_title_font' => 'field_56f526adf8f98',
            'services_title_font_active' => 'field_56f52754f8f9a',
            'services_description_background' => 'field_56f52936815b3',
            'services_description_font' => 'field_56f52a01815b4',
		];

        foreach ($color_fields as $field => $field_key) {
            $field_value = get_field_object($field_key, 'options', true);
            if ($field_value['default_value'] !== $field_value['value']) {

                if (strpos($field, 'footer') !== false
                    || strpos($field, 'header') !== false
                    || strpos($field, 'services') !== false
                ) {
                    switch ($field) {
                        case 'footer_copyrighttext' :
                        case 'footer_titles' :
                        case 'footer_menu_inactive' : {
                            $overridden_css[$field] = str_replace($field_value['default_value'], hex2rgba($field_value['value'], 0.5), $overridden_css[$field]);
                            break;
                        }
                        case 'services_description_background' : {
                            $overridden_css[$field] = str_replace($field_value['default_value'], hex2rgba($field_value['value'], 0.9), $overridden_css[$field]);
                            break;
                        }
                        default :
                            $overridden_css[$field] = str_replace($field_value['default_value'], $field_value['value'], $overridden_css[$field]);
                    }
                } else {
                    $overridden_css['base'] = str_replace($field_value['default_value'], $field_value['value'], $overridden_css['base']);
                }

                if ($field === 'brand_primary') {
                    $brand_primary_color = $field_value['value'];

                    $field_value = get_field_object('field_5697120e6b8f0', 'options', true);

                    $overridden_css['base'] = str_replace($field_value['value'], hex2rgba($brand_primary_color, 0.9), $overridden_css['base']);
                }
            }
        }

        $option_name = 'color_overrides';
        $new_value = implode(' ', $overridden_css);

		if (get_option($option_name) !== false) {
			update_option($option_name, $new_value);
		} else {
			add_option($option_name, $new_value);
		}
	}
}

add_action('acf/save_post', __NAMESPACE__ . '\\override_colors', 20);

function hex2rgba($color, $opacity = false) {

	$default = 'rgb(0,0,0)';

	//Return default if no color provided
	if(empty($color))
		return $default;

	//Sanitize $color if "#" is provided
	if ($color[0] == '#' ) {
		$color = substr( $color, 1 );
	}

	//Check if color has 6 or 3 characters and get values
	if (strlen($color) == 6) {
		$hex = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] );
	} elseif ( strlen( $color ) == 3 ) {
		$hex = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] );
	} else {
		return $default;
	}

	//Convert hexadec to rgb
	$rgb =  array_map('hexdec', $hex);

	//Check if opacity is set(rgba or rgb)
	if($opacity){
		if(abs($opacity) > 1)
			$opacity = 1.0;
		$output = 'rgba('.implode(",",$rgb).','.$opacity.')';
	} else {
		$output = 'rgb('.implode(",",$rgb).')';
	}

	//Return rgb(a) color string
	return $output;
}?>