<?php
// Ajouter les meta boxes
add_action('add_meta_boxes', 'wprg_add_meta_boxes');
function wprg_add_meta_boxes() {
    add_meta_box(
        'wprg_video_details',
        'Détails de la vidéo',
        'wprg_video_details_callback',
        'wprg_reel',
        'normal',
        'high'
    );
}

// Callback pour le meta box vidéo
function wprg_video_details_callback($post) {
    wp_nonce_field('wprg_save_video_details', 'wprg_video_nonce');
    
    $video_url    = get_post_meta($post->ID, '_wprg_video_url', true);
    $video_type   = get_post_meta($post->ID, '_wprg_video_type', true) ?: 'upload';
    $video_upload = get_post_meta($post->ID, '_wprg_video_upload', true);
    ?>
    
    <div class="wprg-meta-box">
        <p>
            <label for="wprg_video_type">Type de vidéo:</label>
            <select name="wprg_video_type" id="wprg_video_type" style="width: 100%; padding: 5px;">
                <option value="upload" <?php selected($video_type, 'upload'); ?>>Upload vidéo verticale</option>
                <option value="youtube" <?php selected($video_type, 'youtube'); ?>>Lien YouTube Short</option>
            </select>
        </p>
        
        <div id="wprg_upload_field" style="margin-top: 15px; <?php echo ($video_type == 'youtube') ? 'display:none;' : ''; ?>">
            <label for="wprg_video_upload">Uploader une vidéo:</label>
            <input type="hidden" name="wprg_video_upload" id="wprg_video_upload" value="<?php echo esc_attr($video_upload); ?>">
            <button type="button" class="button" id="wprg_upload_video_button">Sélectionner une vidéo</button>
            <?php if ($video_upload): ?>
                <div id="wprg_video_preview" style="margin-top: 10px;">
                    <video width="200" controls>
                        <source src="<?php echo esc_url(wp_get_attachment_url($video_upload)); ?>" type="video/mp4">
                    </video>
                </div>
            <?php endif; ?>
        </div>
        
        <div id="wprg_youtube_field" style="margin-top: 15px; <?php echo ($video_type != 'youtube') ? 'display:none;' : ''; ?>">
            <label for="wprg_video_url">Lien YouTube Short:</label>
            <input type="url" name="wprg_video_url" id="wprg_video_url" value="<?php echo esc_url($video_url); ?>" style="width: 100%; padding: 5px;" placeholder="https://youtube.com/shorts/...">
        </div>
    </div>
    
    <script>
    jQuery(document).ready(function($) {
        $('#wprg_video_type').change(function() {
            if ($(this).val() == 'youtube') {
                $('#wprg_upload_field').hide();
                $('#wprg_youtube_field').show();
            } else {
                $('#wprg_upload_field').show();
                $('#wprg_youtube_field').hide();
            }
        });
        
        $('#wprg_upload_video_button').click(function(e) {
            e.preventDefault();
            var frame = wp.media({
                title: 'Sélectionner une vidéo',
                button: {
                    text: 'Utiliser cette vidéo'
                },
                library: {
                    type: 'video'
                },
                multiple: false
            });
            
            frame.on('select', function() {
                var attachment = frame.state().get('selection').first().toJSON();
                $('#wprg_video_upload').val(attachment.id);
                $('#wprg_video_preview').html('<video width="200" controls><source src="' + attachment.url + '" type="video/mp4"></video>');
            });
            
            frame.open();
        });
    });
    </script>
    <?php
}

// Sauvegarder les meta données
add_action('save_post', 'wprg_save_video_details');
function wprg_save_video_details($post_id) {
    if (!isset($_POST['wprg_video_nonce']) || !wp_verify_nonce($_POST['wprg_video_nonce'], 'wprg_save_video_details')) {
        return;
    }
    
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    
    // Sauvegarder le type de vidéo et l'ID upload avec sanitize_text_field
    if (isset($_POST['wprg_video_type'])) {
        update_post_meta($post_id, '_wprg_video_type', sanitize_text_field($_POST['wprg_video_type']));
    }
    
    if (isset($_POST['wprg_video_upload'])) {
        update_post_meta($post_id, '_wprg_video_upload', sanitize_text_field($_POST['wprg_video_upload']));
    }
    
    // CORRECTION : sauvegarder l'URL YouTube avec esc_url_raw (et non sanitize_text_field)
    if (isset($_POST['wprg_video_url'])) {
        update_post_meta($post_id, '_wprg_video_url', esc_url_raw($_POST['wprg_video_url']));
    }
    
    // Si c'est une URL YouTube et pas d'image mise en avant, utiliser la miniature YouTube
    if (isset($_POST['wprg_video_type']) && $_POST['wprg_video_type'] == 'youtube' && isset($_POST['wprg_video_url'])) {
        if (!has_post_thumbnail($post_id)) {
            $youtube_thumbnail = wprg_get_youtube_thumbnail($_POST['wprg_video_url']);
            if ($youtube_thumbnail) {
                wprg_set_thumbnail_from_url($post_id, $youtube_thumbnail);
            }
        }
    }
}

// Fonction pour télécharger et définir une miniature depuis URL
function wprg_set_thumbnail_from_url($post_id, $image_url) {
    require_once(ABSPATH . 'wp-admin/includes/media.php');
    require_once(ABSPATH . 'wp-admin/includes/file.php');
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    
    $tmp = download_url($image_url);
    if (is_wp_error($tmp)) {
        return false;
    }
    
    $file_array = array(
        'name'     => basename($image_url),
        'tmp_name' => $tmp
    );
    
    $attachment_id = media_handle_sideload($file_array, $post_id);
    
    if (is_wp_error($attachment_id)) {
        @unlink($file_array['tmp_name']);
        return false;
    }
    
    set_post_thumbnail($post_id, $attachment_id);
    return true;
}
