<?php
/**
 * Custom Post Type: Trombinoscope des Élus
 * Modernized for WordPress 6.0+
 */

// Prevent direct access
if (!defined('ABSPATH')) {
    exit;
}

function init_CPT_Trombinoscope() {
    $labels = array(
        'name' => _x('Trombinoscope des Élus', 'Post type general name', 'ornex-tuatam'),
        'singular_name' => _x('Élu', 'Post type singular name', 'ornex-tuatam'),
        'add_new' => _x('Ajouter', 'élu', 'ornex-tuatam'),
        'add_new_item' => __('Ajouter un élu', 'ornex-tuatam'),
        'edit_item' => __('Modifier l\'\u00e9lu', 'ornex-tuatam'),
        'new_item' => __('Nouvel élu', 'ornex-tuatam'),
        'all_items' => __('Tous les élus', 'ornex-tuatam'),
        'view_item' => __('Voir l\'\u00e9lu', 'ornex-tuatam'),
        'view_items' => __('Voir les élus', 'ornex-tuatam'),
        'search_items' => __('Rechercher des élus', 'ornex-tuatam'),
        'not_found' => __('Aucun élu trouvé', 'ornex-tuatam'),
        'not_found_in_trash' => __('Aucun élu trouvé dans la corbeille', 'ornex-tuatam'),
        'parent_item_colon' => __('Élu parent :', 'ornex-tuatam'),
        'menu_name' => __('Les Élus', 'ornex-tuatam'),
        'featured_image' => __('Photo de l\'\u00e9lu', 'ornex-tuatam'),
        'set_featured_image' => __('Définir la photo de l\'\u00e9lu', 'ornex-tuatam'),
        'remove_featured_image' => __('Supprimer la photo de l\'\u00e9lu', 'ornex-tuatam'),
        'use_featured_image' => __('Utiliser comme photo de l\'\u00e9lu', 'ornex-tuatam'),
        'archives' => __('Archives des élus', 'ornex-tuatam'),
        'insert_into_item' => __('Insérer dans la fiche élu', 'ornex-tuatam'),
        'uploaded_to_this_item' => __('Téléchargé vers cet élu', 'ornex-tuatam'),
        'filter_items_list' => __('Filtrer la liste des élus', 'ornex-tuatam'),
        'items_list_navigation' => __('Navigation de la liste des élus', 'ornex-tuatam'),
        'items_list' => __('Liste des élus', 'ornex-tuatam'),
    );
    $args = array(
        'labels' => $labels,
        'description' => __('Trombinoscope et informations des élus municipaux', 'ornex-tuatam'),
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'show_in_nav_menus' => true,
        'show_in_admin_bar' => true,
        'query_var' => true,
        'rewrite' => array(
            'slug' => 'elus',
            'with_front' => false,
            'pages' => true,
            'feeds' => false,
        ),
        'exclude_from_search' => true,
        'has_archive' => true,
        'hierarchical' => true,
        'menu_position' => 26,
        'menu_icon' => 'dashicons-groups',
        'supports' => array(
            'title',
            'editor',
            'thumbnail',
            'excerpt',
            'revisions',
            'author',
            'page-attributes',
            'custom-fields'
        ),
        'show_in_rest' => true,
        'rest_base' => 'elus',
        'rest_controller_class' => 'WP_REST_Posts_Controller',
        'delete_with_user' => false,
        'template' => array(
            array('core/paragraph', array(
                'placeholder' => 'Biographie et informations sur cet élu...'
            ))
        ),
        'template_lock' => false,
    );
    // Enregistrement du Custom Post Type
    register_post_type('elus', $args);

    // Labels des fonctions
    $rubLabels = array(
        'name' => _x('Fonctions', 'taxonomy general name', 'ornex-tuatam'),
        'singular_name' => _x('Fonction', 'taxonomy singular name', 'ornex-tuatam'),
        'search_items' => __('Rechercher des fonctions', 'ornex-tuatam'),
        'popular_items' => __('Fonctions populaires', 'ornex-tuatam'),
        'all_items' => __('Toutes les fonctions', 'ornex-tuatam'),
        'parent_item' => __('Fonction parente', 'ornex-tuatam'),
        'parent_item_colon' => __('Fonction parente :', 'ornex-tuatam'),
        'edit_item' => __('Modifier la fonction', 'ornex-tuatam'),
        'view_item' => __('Voir la fonction', 'ornex-tuatam'),
        'update_item' => __('Mettre à jour la fonction', 'ornex-tuatam'),
        'add_new_item' => __('Ajouter une nouvelle fonction', 'ornex-tuatam'),
        'new_item_name' => __('Nom de la nouvelle fonction', 'ornex-tuatam'),
        'separate_items_with_commas' => __('Séparer les fonctions par des virgules', 'ornex-tuatam'),
        'add_or_remove_items' => __('Ajouter ou supprimer des fonctions', 'ornex-tuatam'),
        'choose_from_most_used' => __('Choisir parmi les fonctions les plus utilisées', 'ornex-tuatam'),
        'not_found' => __('Aucune fonction trouvée', 'ornex-tuatam'),
        'menu_name' => __('Fonctions', 'ornex-tuatam'),
    );

    // Enregistrement de la taxonomie Fonctions
    register_taxonomy('elus-fonction', 'elus', array(
        'hierarchical' => true,
        'labels' => $rubLabels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'show_in_nav_menus' => true,
        'show_tagcloud' => true,
        'show_in_quick_edit' => true,
        'show_admin_column' => true,
        'show_in_rest' => true,
        'rest_base' => 'elus-fonctions',
        'rest_controller_class' => 'WP_REST_Terms_Controller',
        'query_var' => true,
        'rewrite' => array(
            'slug' => 'elus-fonction',
            'with_front' => false,
            'hierarchical' => true,
        ),
        'capabilities' => array(
            'manage_terms' => 'manage_categories',
            'edit_terms' => 'manage_categories',
            'delete_terms' => 'manage_categories',
            'assign_terms' => 'edit_posts',
        ),
    ));

    // Labels des commissions
    $rubLabels2 = array(
        'name' => _x('Commissions', 'taxonomy general name', 'ornex-tuatam'),
        'singular_name' => _x('Commission', 'taxonomy singular name', 'ornex-tuatam'),
        'search_items' => __('Rechercher des commissions', 'ornex-tuatam'),
        'popular_items' => __('Commissions populaires', 'ornex-tuatam'),
        'all_items' => __('Toutes les commissions', 'ornex-tuatam'),
        'parent_item' => __('Commission parente', 'ornex-tuatam'),
        'parent_item_colon' => __('Commission parente :', 'ornex-tuatam'),
        'edit_item' => __('Modifier la commission', 'ornex-tuatam'),
        'view_item' => __('Voir la commission', 'ornex-tuatam'),
        'update_item' => __('Mettre à jour la commission', 'ornex-tuatam'),
        'add_new_item' => __('Ajouter une nouvelle commission', 'ornex-tuatam'),
        'new_item_name' => __('Nom de la nouvelle commission', 'ornex-tuatam'),
        'separate_items_with_commas' => __('Séparer les commissions par des virgules', 'ornex-tuatam'),
        'add_or_remove_items' => __('Ajouter ou supprimer des commissions', 'ornex-tuatam'),
        'choose_from_most_used' => __('Choisir parmi les commissions les plus utilisées', 'ornex-tuatam'),
        'not_found' => __('Aucune commission trouvée', 'ornex-tuatam'),
        'menu_name' => __('Commissions', 'ornex-tuatam'),
    );

    // Enregistrement de la taxonomie Commissions
    register_taxonomy('elus-commission', 'elus', array(
        'hierarchical' => true,
        'labels' => $rubLabels2,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'show_in_nav_menus' => true,
        'show_tagcloud' => true,
        'show_in_quick_edit' => true,
        'show_admin_column' => true,
        'show_in_rest' => true,
        'rest_base' => 'elus-commissions',
        'rest_controller_class' => 'WP_REST_Terms_Controller',
        'query_var' => true,
        'rewrite' => array(
            'slug' => 'elus-commission',
            'with_front' => false,
            'hierarchical' => true,
        ),
        'capabilities' => array(
            'manage_terms' => 'manage_categories',
            'edit_terms' => 'manage_categories',
            'delete_terms' => 'manage_categories',
            'assign_terms' => 'edit_posts',
        ),
    ));
}

add_action('init', 'init_CPT_Trombinoscope', 0);

/**
 * Personnalisation des colonnes d'administration
 */
add_filter('manage_edit-elus_columns', 'elus_edit_columns');

function elus_edit_columns($columns) {
    $new_columns = array(
        'cb' => $columns['cb'],
        'thumbnail' => __('Photo', 'ornex-tuatam'),
        'title' => __('Nom de l\'\u00e9lu', 'ornex-tuatam'),
        'elus-fonction' => __('Fonction', 'ornex-tuatam'),
        'elus-commission' => __('Commission', 'ornex-tuatam'),
        'menu_order' => __('Ordre', 'ornex-tuatam'),
        'author' => __('Auteur', 'ornex-tuatam'),
        'date' => __('Publication', 'ornex-tuatam')
    );
    return $new_columns;
}

// Remplissage des colonnes personnalisées
add_action('manage_elus_posts_custom_column', 'elus_manage_columns', 10, 2);

function elus_manage_columns($column, $post_id) {
    switch ($column) {
        case 'thumbnail':
            $thumbnail = get_the_post_thumbnail($post_id, array(50, 50));
            if ($thumbnail) {
                echo $thumbnail;
            } else {
                echo '<span class="dashicons dashicons-admin-users" style="color: #c3c4c7; font-size: 32px; width: 50px; height: 50px; line-height: 50px;"></span>';
            }
            break;
            
        case 'elus-fonction':
            $terms = get_the_terms($post_id, 'elus-fonction');
            if (!empty($terms) && !is_wp_error($terms)) {
                $term_links = array();
                foreach ($terms as $term) {
                    $term_links[] = sprintf(
                        '<a href="%s">%s</a>',
                        esc_url(add_query_arg(array(
                            'post_type' => get_post_type($post_id),
                            'elus-fonction' => $term->slug
                        ), 'edit.php')),
                        esc_html($term->name)
                    );
                }
                echo implode(', ', $term_links);
            } else {
                echo '<span aria-hidden="true">—</span><span class="screen-reader-text">' . __('Aucune fonction', 'ornex-tuatam') . '</span>';
            }
            break;
            
        case 'elus-commission':
            $terms = get_the_terms($post_id, 'elus-commission');
            if (!empty($terms) && !is_wp_error($terms)) {
                $term_links = array();
                foreach ($terms as $term) {
                    $term_links[] = sprintf(
                        '<a href="%s">%s</a>',
                        esc_url(add_query_arg(array(
                            'post_type' => get_post_type($post_id),
                            'elus-commission' => $term->slug
                        ), 'edit.php')),
                        esc_html($term->name)
                    );
                }
                echo implode(', ', $term_links);
            } else {
                echo '<span aria-hidden="true">—</span><span class="screen-reader-text">' . __('Aucune commission', 'ornex-tuatam') . '</span>';
            }
            break;
            
        case 'menu_order':
            $menu_order = get_post_field('menu_order', $post_id);
            echo $menu_order ? $menu_order : '0';
            break;
    }
}

/**
 * Colonnes triables
 */
add_filter('manage_edit-elus_sortable_columns', 'elus_sortable_columns');

function elus_sortable_columns($columns) {
    $columns['menu_order'] = 'menu_order';
    $columns['elus-fonction'] = 'elus-fonction';
    $columns['elus-commission'] = 'elus-commission';
    return $columns;
}

/**
 * Tri personnalisé pour les colonnes
 */
add_action('pre_get_posts', 'elus_posts_orderby');

function elus_posts_orderby($query) {
    if (!is_admin() || !$query->is_main_query()) {
        return;
    }
    
    if ('elus' !== $query->get('post_type')) {
        return;
    }
    
    $orderby = $query->get('orderby');
    
    if ('menu_order' === $orderby) {
        $query->set('orderby', 'menu_order');
        $query->set('order', 'ASC');
    }
}

/**
 * Ajout de champs personnalisés à l'API REST
 */
add_action('rest_api_init', 'elus_register_rest_fields');

function elus_register_rest_fields() {
    // Photo de l'élu
    register_rest_field('elus', 'featured_image_url', array(
        'get_callback' => function($post) {
            $image_id = get_post_thumbnail_id($post['id']);
            if ($image_id) {
                $image = wp_get_attachment_image_src($image_id, 'full');
                return $image ? $image[0] : null;
            }
            return null;
        },
        'schema' => array(
            'description' => __('URL de la photo de l\'élu', 'ornex-tuatam'),
            'type' => 'string',
            'format' => 'uri',
            'context' => array('view', 'edit'),
        ),
    ));
    
    // Fonctions
    register_rest_field('elus', 'fonctions_details', array(
        'get_callback' => function($post) {
            $terms = get_the_terms($post['id'], 'elus-fonction');
            if (empty($terms) || is_wp_error($terms)) {
                return array();
            }
            
            $fonctions = array();
            foreach ($terms as $term) {
                $fonctions[] = array(
                    'id' => $term->term_id,
                    'name' => $term->name,
                    'slug' => $term->slug,
                    'link' => get_term_link($term),
                );
            }
            return $fonctions;
        },
        'schema' => array(
            'description' => __('Détails des fonctions de l\'élu', 'ornex-tuatam'),
            'type' => 'array',
            'context' => array('view', 'edit'),
        ),
    ));
    
    // Commissions
    register_rest_field('elus', 'commissions_details', array(
        'get_callback' => function($post) {
            $terms = get_the_terms($post['id'], 'elus-commission');
            if (empty($terms) || is_wp_error($terms)) {
                return array();
            }
            
            $commissions = array();
            foreach ($terms as $term) {
                $commissions[] = array(
                    'id' => $term->term_id,
                    'name' => $term->name,
                    'slug' => $term->slug,
                    'link' => get_term_link($term),
                );
            }
            return $commissions;
        },
        'schema' => array(
            'description' => __('Détails des commissions de l\'élu', 'ornex-tuatam'),
            'type' => 'array',
            'context' => array('view', 'edit'),
        ),
    ));
    
    // Ordre d'affichage
    register_rest_field('elus', 'menu_order', array(
        'get_callback' => function($post) {
            return (int) get_post_field('menu_order', $post['id']);
        },
        'schema' => array(
            'description' => __('Ordre d\'affichage de l\'élu', 'ornex-tuatam'),
            'type' => 'integer',
            'context' => array('view', 'edit'),
        ),
    ));
}

/**
 * Styles d'administration
 */
add_action('admin_head', 'elus_admin_styles');

function elus_admin_styles() {
    global $post_type;
    if ('elus' === $post_type) {
        echo '<style>
            .wp-list-table .column-thumbnail { width: 60px; }
            .wp-list-table .column-elus-fonction { width: 150px; }
            .wp-list-table .column-elus-commission { width: 150px; }
            .wp-list-table .column-menu_order { width: 80px; text-align: center; }
            
            .column-thumbnail img {
                border-radius: 50%;
                box-shadow: 0 1px 3px rgba(0,0,0,0.1);
            }
            
            .column-menu_order {
                text-align: center;
                font-weight: 600;
            }
        </style>';
    }
}