<?php
/**
 * Store Settings Provider
 * 
 * Provides store settings data including countries, timezones, currencies, etc.
 * 
 * @package WooNooW
 */

namespace WooNooW\Compat;

class StoreSettingsProvider {
    
    /**
     * Get all countries from WooCommerce
     * 
     * @return array List of countries
     */
    public static function get_countries(): array {
        if (!class_exists('WC_Countries')) {
            return [];
        }
        
        $wc_countries = new \WC_Countries();
        $countries = $wc_countries->get_countries();
        
        $formatted = [];
        foreach ($countries as $code => $name) {
            $formatted[] = [
                'code' => $code,
                'name' => $name,
            ];
        }
        
        return $formatted;
    }
    
    /**
     * Get all timezones
     * 
     * @return array List of timezones
     */
    public static function get_timezones(): array {
        $timezones = timezone_identifiers_list();
        $formatted = [];
        
        foreach ($timezones as $timezone) {
            // Group by continent
            $parts = explode('/', $timezone);
            $continent = $parts[0] ?? 'Other';
            
            if (!isset($formatted[$continent])) {
                $formatted[$continent] = [];
            }
            
            // Format display name
            $display = str_replace('_', ' ', $timezone);
            
            // Get UTC offset
            try {
                $tz = new \DateTimeZone($timezone);
                $now = new \DateTime('now', $tz);
                $offset = $tz->getOffset($now);
                $hours = floor($offset / 3600);
                $minutes = abs(floor(($offset % 3600) / 60));
                $offset_string = sprintf('UTC%+d:%02d', $hours, $minutes);
            } catch (\Exception $e) {
                $offset_string = 'UTC';
            }
            
            $formatted[$continent][] = [
                'value' => $timezone,
                'label' => $display,
                'offset' => $offset_string,
            ];
        }
        
        return $formatted;
    }
    
    /**
     * Get all currencies from WooCommerce
     * 
     * @return array List of currencies
     */
    public static function get_currencies(): array {
        if (!function_exists('get_woocommerce_currencies')) {
            return [];
        }
        
        $currencies = get_woocommerce_currencies();
        $formatted = [];
        
        foreach ($currencies as $code => $name) {
            $symbol = get_woocommerce_currency_symbol($code);
            
            $formatted[] = [
                'code' => $code,
                'name' => $name,
                'symbol' => $symbol,
            ];
        }
        
        return $formatted;
    }
    
    /**
     * Get store settings
     * 
     * @return array Store settings
     */
    public static function get_settings(): array {
        // WooCommerce stores country as "COUNTRY:STATE" format
        $default_country = get_option('woocommerce_default_country', '');
        $country_parts = explode(':', $default_country);
        $country_code = $country_parts[0] ?? '';
        
        return [
            'store_name' => get_option('blogname', ''),
            'contact_email' => get_option('admin_email', ''),
            'support_email' => get_option('woocommerce_email_from_address', ''),
            'phone' => get_option('woocommerce_store_phone', ''),
            'country' => $country_code,
            'address' => get_option('woocommerce_store_address', ''),
            'address_2' => get_option('woocommerce_store_address_2', ''),
            'city' => get_option('woocommerce_store_city', ''),
            'postcode' => get_option('woocommerce_store_postcode', ''),
            'currency' => get_option('woocommerce_currency', 'USD'),
            'currency_position' => get_option('woocommerce_currency_pos', 'left'),
            'thousand_separator' => get_option('woocommerce_price_thousand_sep', ','),
            'decimal_separator' => get_option('woocommerce_price_decimal_sep', '.'),
            'number_of_decimals' => (int) get_option('woocommerce_price_num_decimals', 2),
            'timezone' => get_option('timezone_string', 'UTC') ?: 'UTC',
            'weight_unit' => get_option('woocommerce_weight_unit', 'kg'),
            'dimension_unit' => get_option('woocommerce_dimension_unit', 'cm'),
            // Branding
            'store_logo' => get_option('woonoow_store_logo', ''),
            'store_logo_dark' => get_option('woonoow_store_logo_dark', ''),
            'store_icon' => get_option('woonoow_store_icon', ''),
            'store_tagline' => get_option('blogdescription', ''),
            'primary_color' => get_option('woonoow_primary_color', '#3b82f6'),
            'accent_color' => get_option('woonoow_accent_color', '#10b981'),
            'error_color' => get_option('woonoow_error_color', '#ef4444'),
        ];
    }
    
    /**
     * Save store settings
     * 
     * @param array $settings Settings to save
     * @return bool True on success
     */
    public static function save_settings(array $settings): bool {
        $mapping = [
            'store_name' => 'blogname',
            'contact_email' => 'admin_email',
            'support_email' => 'woocommerce_email_from_address',
            'phone' => 'woocommerce_store_phone',
            'country' => 'woocommerce_default_country',
            'address' => 'woocommerce_store_address',
            'address_2' => 'woocommerce_store_address_2',
            'city' => 'woocommerce_store_city',
            'postcode' => 'woocommerce_store_postcode',
            'currency' => 'woocommerce_currency',
            'currency_position' => 'woocommerce_currency_pos',
            'thousand_separator' => 'woocommerce_price_thousand_sep',
            'decimal_separator' => 'woocommerce_price_decimal_sep',
            'number_of_decimals' => 'woocommerce_price_num_decimals',
            'timezone' => 'timezone_string',
            'weight_unit' => 'woocommerce_weight_unit',
            'dimension_unit' => 'woocommerce_dimension_unit',
            // Branding
            'store_logo' => 'woonoow_store_logo',
            'store_logo_dark' => 'woonoow_store_logo_dark',
            'store_icon' => 'woonoow_store_icon',
            'store_tagline' => 'blogdescription',
            'primary_color' => 'woonoow_primary_color',
            'accent_color' => 'woonoow_accent_color',
            'error_color' => 'woonoow_error_color',
        ];
        
        foreach ($settings as $key => $value) {
            if (isset($mapping[$key])) {
                update_option($mapping[$key], $value);
            }
        }
        
        return true;
    }
}
