<?php

namespace AC_SYNC\Includes\Classes\Setting {
    if (!defined('ABSPATH')) exit; // Exit if accessed directly

    /**
     * Opzione per configurare la posizione del box attributi nella scheda prodotto.
     */
    class Action_Wear_Setting_Attributes_Box_Position implements Action_Wear_Setting_Entity
    {
        /**
         * Lista degli hooks WooCommerce disponibili per la scheda prodotto
         */
        public const AVAILABLE_HOOKS = [
            'disabled' => [
                'hook' => 'disabled',
                'priority' => 0,
                'label' => 'Disabilitato',
                'description' => 'Non mostrare il box degli attributi'
            ],
            'before_single_product' => [
                'hook' => 'woocommerce_before_single_product',
                'priority' => 10,
                'label' => 'Prima del prodotto',
                'description' => 'Prima dell\'intero contenuto del prodotto'
            ],
            'before_single_product_summary' => [
                'hook' => 'woocommerce_before_single_product_summary',
                'priority' => 10,
                'label' => 'Prima del riepilogo (area immagini)',
                'description' => 'Nell\'area delle immagini, prima del riepilogo'
            ],
            'after_product_images' => [
                'hook' => 'woocommerce_product_thumbnails',
                'priority' => 100,
                'label' => 'Dopo le immagini prodotto',
                'description' => 'Dopo le thumbnail delle immagini'
            ],
            'summary_after_title' => [
                'hook' => 'woocommerce_single_product_summary',
                'priority' => 6,
                'label' => 'Dopo il titolo',
                'description' => 'Nel riepilogo, subito dopo il titolo'
            ],
            'summary_after_price' => [
                'hook' => 'woocommerce_single_product_summary',
                'priority' => 11,
                'label' => 'Dopo il prezzo',
                'description' => 'Nel riepilogo, subito dopo il prezzo'
            ],
            'summary_after_short_description' => [
                'hook' => 'woocommerce_single_product_summary',
                'priority' => 21,
                'label' => 'Dopo la descrizione breve',
                'description' => 'Nel riepilogo, dopo la descrizione breve'
            ],
            'summary_after_add_to_cart' => [
                'hook' => 'woocommerce_single_product_summary',
                'priority' => 31,
                'label' => 'Dopo il pulsante aggiungi al carrello',
                'description' => 'Nel riepilogo, dopo il pulsante acquista'
            ],
            'product_meta_start' => [
                'hook' => 'woocommerce_product_meta_start',
                'priority' => 10,
                'label' => 'Prima dei meta prodotto',
                'description' => 'Prima di SKU, categorie e tags'
            ],
            'product_meta_end' => [
                'hook' => 'woocommerce_product_meta_end',
                'priority' => 10,
                'label' => 'Dopo i meta prodotto',
                'description' => 'Dopo SKU, categorie e tags'
            ],
            'summary_after_sharing' => [
                'hook' => 'woocommerce_single_product_summary',
                'priority' => 51,
                'label' => 'Dopo i pulsanti di condivisione',
                'description' => 'Nel riepilogo, dopo l\'area condivisione'
            ],
            'after_single_product_summary' => [
                'hook' => 'woocommerce_after_single_product_summary',
                'priority' => 5,
                'label' => 'Dopo il riepilogo (prima delle tabs)',
                'description' => 'Tra il riepilogo e le schede prodotto'
            ],
            'after_product_tabs' => [
                'hook' => 'woocommerce_after_single_product_summary',
                'priority' => 15,
                'label' => 'Dopo le tabs del prodotto',
                'description' => 'Dopo le schede (descrizione, recensioni, ecc.)'
            ],
            'after_single_product' => [
                'hook' => 'woocommerce_after_single_product',
                'priority' => 10,
                'label' => 'Dopo il prodotto',
                'description' => 'Alla fine dell\'intero contenuto del prodotto'
            ],
        ];

        public function toggle()
        {
            return null;
        }

        public function get()
        {
            return get_option("_ACTIONWEAR_ATTRIBUTES_BOX_POSITION", "summary_after_short_description");
        }

        public function validate($v): bool
        {
            return is_string($v) && array_key_exists($v, self::AVAILABLE_HOOKS);
        }

        public function set($value)
        {
            if (!$this->validate($value)) throw new \Exception("Invalid hook position value");
            update_option("_ACTIONWEAR_ATTRIBUTES_BOX_POSITION", (string)$value);
            return $this->get();
        }

        /**
         * Restituisce la configurazione dell'hook selezionato
         */
        public static function getSelectedHookConfig()
        {
            $position = get_option("_ACTIONWEAR_ATTRIBUTES_BOX_POSITION", "summary_after_short_description");
            return self::AVAILABLE_HOOKS[$position] ?? self::AVAILABLE_HOOKS['summary_after_short_description'];
        }

        /**
         * Restituisce tutti gli hooks disponibili per il frontend
         */
        public static function getAvailableHooks()
        {
            return self::AVAILABLE_HOOKS;
        }
    }
}
