<?php
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

class Avision_Design_Tokens {
	private static $defaults = array(
		'--avi-nav-bg'            => '#0D1E38',
		'--avi-nav-border'        => 'rgba(255,255,255,0.08)',
		'--avi-nav-text'          => '#C0D0E8',
		'--avi-nav-text-hover'    => '#FFFFFF',
		'--avi-nav-text-active'   => '#FFFFFF',
		'--avi-nav-height'        => '60px',
		'--avi-nav-backdrop'      => 'none',
		'--avi-bg'                => '#0A1628',
		'--avi-surface'           => '#0D1E38',
		'--avi-surface-2'         => '#112244',
		'--avi-surface-3'         => '#1A2E54',
		'--avi-primary'           => '#3B6FD4',
		'--avi-primary-dark'      => '#2855A8',
		'--avi-primary-light'     => '#6B9FE8',
		'--avi-primary-alpha'     => 'rgba(59,111,212,0.12)',
		'--avi-accent'            => '#F0A030',
		'--avi-accent-dark'       => '#E07010',
		'--avi-btn-bg'            => '#F0A030',
		'--avi-btn-hover'         => '#E07010',
		'--avi-btn-text'          => '#1A1A1A',
		'--avi-text'              => '#FFFFFF',
		'--avi-text-muted'        => '#A0B4D0',
		'--avi-text-inverse'      => '#1A202C',
		'--avi-footer-bg'         => '#080E1C',
		'--avi-footer-border'     => 'rgba(255,255,255,0.06)',
		'--avi-footer-text'       => '#6080A0',
		'--avi-footer-text-hover' => '#A0C0D8',
		'--avi-footer-heading'    => '#708090',
		'--avi-gradient-hero'     => 'linear-gradient(180deg, #0D1E38 0%, #0A1628 100%)',
		'--avi-gradient-primary'  => 'linear-gradient(135deg, #F5B040 0%, #E07010 100%)',
		'--avi-gradient-cta'      => 'linear-gradient(135deg, #F5B040 0%, #E07010 100%)',
		'--avi-gradient-glow'     => 'radial-gradient(ellipse 70% 50% at 50% 0%, rgba(59,111,212,0.15) 0%, transparent 70%)',
	);

	private static $presets = array(
		'avision' => array(
			'--avi-nav-bg'            => '#0D1E38',
			'--avi-nav-border'        => 'rgba(255,255,255,0.08)',
			'--avi-nav-text'          => '#C0D0E8',
			'--avi-nav-text-hover'    => '#FFFFFF',
			'--avi-nav-text-active'   => '#FFFFFF',
			'--avi-nav-height'        => '60px',
			'--avi-nav-backdrop'      => 'none',
			'--avi-bg'                => '#0A1628',
			'--avi-surface'           => '#0D1E38',
			'--avi-surface-2'         => '#112244',
			'--avi-surface-3'         => '#1A2E54',
			'--avi-primary'           => '#3B6FD4',
			'--avi-primary-dark'      => '#2855A8',
			'--avi-primary-light'     => '#6B9FE8',
			'--avi-primary-alpha'     => 'rgba(59,111,212,0.12)',
			'--avi-accent'            => '#F0A030',
			'--avi-accent-dark'       => '#E07010',
			'--avi-btn-bg'            => '#F0A030',
			'--avi-btn-hover'         => '#E07010',
			'--avi-btn-text'          => '#1A1A1A',
			'--avi-text'              => '#FFFFFF',
			'--avi-text-muted'        => '#A0B4D0',
			'--avi-text-inverse'      => '#1A202C',
			'--avi-footer-bg'         => '#080E1C',
			'--avi-footer-border'     => 'rgba(255,255,255,0.06)',
			'--avi-footer-text'       => '#6080A0',
			'--avi-footer-text-hover' => '#A0C0D8',
			'--avi-footer-heading'    => '#708090',
			'--avi-gradient-hero'     => 'linear-gradient(180deg, #0D1E38 0%, #0A1628 100%)',
			'--avi-gradient-primary'  => 'linear-gradient(135deg, #F5B040 0%, #E07010 100%)',
			'--avi-gradient-cta'      => 'linear-gradient(135deg, #F5B040 0%, #E07010 100%)',
			'--avi-gradient-glow'     => 'radial-gradient(ellipse 70% 50% at 50% 0%, rgba(59,111,212,0.15) 0%, transparent 70%)',
		),
	);

	public static function init(): void {
		add_action( 'wp_enqueue_scripts', array( __CLASS__, 'enqueue_base_styles' ), 20 );
		add_action( 'wp_head', array( __CLASS__, 'output_tokens' ), 20 );
	}

	public static function enqueue_base_styles(): void {
		if ( ! defined( 'AVISION_URL' ) || ! defined( 'AVISION_PATH' ) ) {
			return;
		}
		$rel = 'assets/css/avi-base.css';
		if ( file_exists( AVISION_PATH . $rel ) ) {
			wp_enqueue_style( 'avi-base', AVISION_URL . $rel, array(), defined( 'AVISION_VERSION' ) ? AVISION_VERSION : null );
		}
	}

	public static function get_tokens(): array {
		$active = get_option( 'avi_theme_preset', 'avision' );
		$preset = isset( self::$presets[ $active ] ) ? self::$presets[ $active ] : array();
		return array_merge( self::$defaults, $preset );
	}

	public static function sanitize_token_value( $value ): string {
		$value = is_string( $value ) ? trim( $value ) : '';
		if ( $value === '' ) {
			return '';
		}
		return preg_replace( '/[^a-zA-Z0-9#(),.%\-\s]/', '', $value );
	}

	public static function output_tokens(): void {
		error_log( '[AVI] output_tokens() called' );
		echo '<style id="avi-design-tokens">:root{';
		foreach ( self::$defaults as $token => $default ) {
			$opt_key = 'avi_tok_' . str_replace( '-', '_', $token );
			$value   = get_option( $opt_key, $default );
			$value   = self::sanitize_token_value( $value );
			if ( $value ) {
				echo esc_attr( $token ) . ':' . $value . ';';
			}
		}
		echo '}body,html{background-color:#0A1628!important;color:#EEEEFF!important;}</style>' . "\n";
	}
}
