<?php
/**
 * Gallery Tab Taxonomy Management
 */

if (!defined('ABSPATH')) {
    exit;
}

class BW_Gallery_Taxonomy {
    
    const TAXONOMY_NAME = 'bwg_gallery_tab';
    
    public function init() {
        add_action('init', array($this, 'register_taxonomy'));
        add_action('admin_menu', array($this, 'add_admin_menu'), 20); // Higher priority to ensure parent menu exists
        add_filter('bwg_gallery_tabs', array($this, 'get_predefined_tabs'));
        
        // Handle delete action early before any output
        add_action('admin_init', array($this, 'handle_delete_action'));
    }
    
    public function register_taxonomy() {
        $labels = array(
            'name'              => _x('Gallery Tabs', 'taxonomy general name', 'bw-gallery'),
            'singular_name'     => _x('Gallery Tab', 'taxonomy singular name', 'bw-gallery'),
            'search_items'      => __('Search Tabs', 'bw-gallery'),
            'all_items'         => __('All Tabs', 'bw-gallery'),
            'edit_item'         => __('Edit Tab', 'bw-gallery'),
            'update_item'       => __('Update Tab', 'bw-gallery'),
            'add_new_item'      => __('Add New Tab', 'bw-gallery'),
            'new_item_name'     => __('New Tab Name', 'bw-gallery'),
            'menu_name'         => __('Gallery Tabs', 'bw-gallery'),
        );
        
        $args = array(
            'labels'            => $labels,
            'public'            => false,
            'show_ui'           => false, // We'll create custom UI
            'show_in_menu'      => false,
            'show_admin_column' => false,
            'hierarchical'      => false,
            'rewrite'           => false,
        );
        
        register_taxonomy(self::TAXONOMY_NAME, null, $args);
        
        // Initialize tabs (no defaults)
        $this->maybe_add_default_tabs();
    }
    
    public function add_admin_menu() {
        add_submenu_page(
            'bw-gallery',
            __('Gallery Tabs', 'bw-gallery'),
            __('Gallery Tabs', 'bw-gallery'),
            'manage_options',
            'bw-gallery-tabs',
            array($this, 'render_tabs_page')
        );
    }
    
    public function handle_delete_action() {
        // Only process on our specific page
        if (!isset($_GET['page']) || $_GET['page'] !== 'bw-gallery-tabs') {
            return;
        }
        
        if (isset($_GET['action']) && $_GET['action'] === 'delete' && isset($_GET['tab_id'])) {
            $this->delete_tab(intval($_GET['tab_id']));
        }
    }
    
    public function render_tabs_page() {
        // Handle form submission
        if (isset($_POST['submit']) && isset($_POST['bwg_tabs_nonce'])) {
            $this->save_tabs();
        }
        
        $tabs = $this->get_all_tabs();
        include BWG_PLUGIN_DIR . 'templates/admin/gallery-tabs.php';
    }
    
    private function save_tabs() {
        if (!wp_verify_nonce($_POST['bwg_tabs_nonce'], 'bwg_save_tabs')) {
            return;
        }
        
        if (!current_user_can('manage_options')) {
            return;
        }
        
        $tab_name = sanitize_text_field($_POST['tab_name']);
        $tab_slug = sanitize_title($_POST['tab_slug']);
        
        if (empty($tab_slug)) {
            $tab_slug = sanitize_title($tab_name);
        }
        
        if (!empty($tab_name)) {
            $result = wp_insert_term($tab_name, self::TAXONOMY_NAME, array(
                'slug' => $tab_slug
            ));
            
            if (!is_wp_error($result)) {
                add_settings_error('bwg_tabs', 'tab_added', __('Tab added successfully.', 'bw-gallery'), 'updated');
            } else {
                add_settings_error('bwg_tabs', 'tab_error', $result->get_error_message(), 'error');
            }
        }
    }
    
    private function delete_tab($term_id) {
        if (!current_user_can('manage_options')) {
            wp_die(__('Insufficient permissions', 'bw-gallery'));
        }
        
        check_admin_referer('delete_tab_' . $term_id);
        
        $result = wp_delete_term($term_id, self::TAXONOMY_NAME);
        
        if ($result && !is_wp_error($result)) {
            $redirect_url = add_query_arg(
                array(
                    'page' => 'bw-gallery-tabs',
                    'deleted' => '1'
                ),
                admin_url('admin.php')
            );
            wp_safe_redirect($redirect_url);
            exit;
        } else {
            $redirect_url = add_query_arg(
                array(
                    'page' => 'bw-gallery-tabs',
                    'error' => '1'
                ),
                admin_url('admin.php')
            );
            wp_safe_redirect($redirect_url);
            exit;
        }
    }
    
    public function get_all_tabs() {
        $terms = get_terms(array(
            'taxonomy' => self::TAXONOMY_NAME,
            'hide_empty' => false,
            'orderby' => 'name',
            'order' => 'ASC'
        ));
        
        if (is_wp_error($terms)) {
            return array();
        }
        
        return $terms;
    }
    
    public function get_predefined_tabs() {
        $tabs = $this->get_all_tabs();
        $result = array();
        
        foreach ($tabs as $tab) {
            $result[$tab->slug] = $tab->name;
        }
        
        return $result;
    }
    
    private function maybe_add_default_tabs() {
        // Start with blank - no default tabs
        // Users can add their own tabs as needed
    }
    
    public static function activate() {
        $instance = new self();
        $instance->register_taxonomy();
        $instance->maybe_add_default_tabs();
        flush_rewrite_rules();
    }
}