<?php
/**
 * Admin Orders Template
 * 
 * Display order history with status tracking
 * 
 * @package LivraisonAPI
 */

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

global $wpdb;

$livraison_orders_per_page = 20;

// Vérification du nonce pour les paramètres GET
$livraison_current_page = 1;
$livraison_status_filter = 'all';
$livraison_search = '';

if ( isset( $_GET['livraison_orders_nonce'] ) && 
     wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['livraison_orders_nonce'] ) ), 'livraison_orders_search' ) ) {
    
    $livraison_current_page = isset( $_GET['paged'] ) ? max( 1, intval( wp_unslash( $_GET['paged'] ) ) ) : 1;
    $livraison_status_filter = isset( $_GET['status'] ) ? sanitize_text_field( wp_unslash( $_GET['status'] ) ) : 'all';
    $livraison_search = isset( $_GET['s'] ) ? sanitize_text_field( wp_unslash( $_GET['s'] ) ) : '';
}

$livraison_offset = ( $livraison_current_page - 1 ) * $livraison_orders_per_page;

$livraison_table_name = $wpdb->prefix . 'livraison_api_logs';
 
$livraison_has_status = ( $livraison_status_filter !== 'all' );
$livraison_has_search = ( ! empty( $livraison_search ) );
$livraison_like       = $livraison_has_search ? '%' . $wpdb->esc_like( $livraison_search ) . '%' : '';
 
$livraison_cache_key    = 'livraison_orders_stats_' . md5( $livraison_status_filter . $livraison_search );
$livraison_cached_data  = wp_cache_get( $livraison_cache_key, 'livraison_api' );
 
if ( false === $livraison_cached_data ) {
 
    if ( $livraison_has_status && $livraison_has_search ) {
 
        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
        $livraison_total_orders = (int) $wpdb->get_var(
            $wpdb->prepare(
                "SELECT COUNT(*) FROM " . esc_sql( $livraison_table_name ) . " WHERE status = %s AND (order_id LIKE %s OR course_id LIKE %s OR client_name LIKE %s OR merchant_name LIKE %s OR agence_name LIKE %s OR payer_type LIKE %s)",
                $livraison_status_filter,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like
            )
        );
 
        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
        $livraison_orders = $wpdb->get_results(
            $wpdb->prepare(
                "SELECT * FROM " . esc_sql( $livraison_table_name ) . " WHERE status = %s AND (order_id LIKE %s OR course_id LIKE %s OR client_name LIKE %s OR merchant_name LIKE %s OR agence_name LIKE %s OR payer_type LIKE %s) ORDER BY created_at DESC LIMIT %d OFFSET %d",
                $livraison_status_filter,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_orders_per_page,
                $livraison_offset
            )
        );
 
    } elseif ( $livraison_has_status ) {
 
        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
        $livraison_total_orders = (int) $wpdb->get_var(
            $wpdb->prepare(
                "SELECT COUNT(*) FROM " . esc_sql( $livraison_table_name ) . " WHERE status = %s",
                $livraison_status_filter
            )
        );
 
        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
        $livraison_orders = $wpdb->get_results(
            $wpdb->prepare(
                "SELECT * FROM " . esc_sql( $livraison_table_name ) . " WHERE status = %s ORDER BY created_at DESC LIMIT %d OFFSET %d",
                $livraison_status_filter,
                $livraison_orders_per_page,
                $livraison_offset
            )
        );
 
    } elseif ( $livraison_has_search ) {
 
        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
        $livraison_total_orders = (int) $wpdb->get_var(
            $wpdb->prepare(
                "SELECT COUNT(*) FROM " . esc_sql( $livraison_table_name ) . " WHERE (order_id LIKE %s OR course_id LIKE %s OR client_name LIKE %s OR merchant_name LIKE %s OR agence_name LIKE %s OR payer_type LIKE %s)",
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like
            )
        );
 
        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
        $livraison_orders = $wpdb->get_results(
            $wpdb->prepare(
                "SELECT * FROM " . esc_sql( $livraison_table_name ) . " WHERE (order_id LIKE %s OR course_id LIKE %s OR client_name LIKE %s OR merchant_name LIKE %s OR agence_name LIKE %s OR payer_type LIKE %s) ORDER BY created_at DESC LIMIT %d OFFSET %d",
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_like,
                $livraison_orders_per_page,
                $livraison_offset
            )
        );
 
    } else {
 
        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
        $livraison_total_orders = (int) $wpdb->get_var(
            "SELECT COUNT(*) FROM " . esc_sql( $livraison_table_name )
        );
 
        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
        $livraison_orders = $wpdb->get_results(
            $wpdb->prepare(
                "SELECT * FROM " . esc_sql( $livraison_table_name ) . " ORDER BY created_at DESC LIMIT %d OFFSET %d",
                $livraison_orders_per_page,
                $livraison_offset
            )
        );
    }
 
    $livraison_total_pages = ceil( $livraison_total_orders / $livraison_orders_per_page );
 
    // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
    $livraison_status_counts_result = $wpdb->get_row(
        "SELECT
            COUNT(*) AS all_count,
            SUM(status = 'sent') AS sent_count,
            SUM(status = 'assigned') AS assigned_count,
            SUM(status = 'in_progress') AS in_progress_count,
            SUM(status = 'delivered') AS delivered_count,
            SUM(status = 'failed') AS failed_count,
            SUM(status = 'cancelled') AS cancelled_count
        FROM " . esc_sql( $livraison_table_name )
    );
 
    $livraison_status_counts = array(
        'all'         => isset( $livraison_status_counts_result->all_count ) ? (int) $livraison_status_counts_result->all_count : 0,
        'sent'        => isset( $livraison_status_counts_result->sent_count ) ? (int) $livraison_status_counts_result->sent_count : 0,
        'assigned'    => isset( $livraison_status_counts_result->assigned_count ) ? (int) $livraison_status_counts_result->assigned_count : 0,
        'in_progress' => isset( $livraison_status_counts_result->in_progress_count ) ? (int) $livraison_status_counts_result->in_progress_count : 0,
        'delivered'   => isset( $livraison_status_counts_result->delivered_count ) ? (int) $livraison_status_counts_result->delivered_count : 0,
        'failed'      => isset( $livraison_status_counts_result->failed_count ) ? (int) $livraison_status_counts_result->failed_count : 0,
        'cancelled'   => isset( $livraison_status_counts_result->cancelled_count ) ? (int) $livraison_status_counts_result->cancelled_count : 0,
    );
 
    $livraison_cached_data = array(
        'total_orders'   => $livraison_total_orders,
        'orders'         => $livraison_orders,
        'total_pages'    => $livraison_total_pages,
        'status_counts'  => $livraison_status_counts,
    );
 
    wp_cache_set( $livraison_cache_key, $livraison_cached_data, 'livraison_api', 300 );
}

// Extraire les données du cache
$livraison_total_orders = isset( $livraison_cached_data['total_orders'] ) ? $livraison_cached_data['total_orders'] : 0;
$livraison_orders = isset( $livraison_cached_data['orders'] ) ? $livraison_cached_data['orders'] : array();
$livraison_total_pages = isset( $livraison_cached_data['total_pages'] ) ? $livraison_cached_data['total_pages'] : 0;
$livraison_status_counts = isset( $livraison_cached_data['status_counts'] ) ? $livraison_cached_data['status_counts'] : array();

// Labels et couleurs des statuts
$livraison_status_labels = array(
    'sent' => __( 'Sent', 'sendi-api' ),
    'assigned' => __( 'Assigned', 'sendi-api' ),
    'in_progress' => __( 'In Progress', 'sendi-api' ),
    'delivered' => __( 'Delivered', 'sendi-api' ),
    'failed' => __( 'Failed', 'sendi-api' ),
    'cancelled' => __( 'Cancelled', 'sendi-api' )
);

$livraison_status_colors = array(
    'sent' => '#f59e0b',
    'assigned' => '#3b82f6',
    'in_progress' => '#8b5cf6',
    'delivered' => '#22c55e',
    'failed' => '#ef4444',
    'cancelled' => '#6b7280'
);

// Labels pour le type de payeur
$livraison_payer_labels = array(
    'client' => __( 'Client', 'sendi-api' ),
    'commercant' => __( 'Merchant', 'sendi-api' )
);

$livraison_payer_colors = array(
    'client' => '#1e40af',
    'commercant' => '#22c55e'
);

$livraison_payer_icons = array(
    'client' => '👤',
    'commercant' => '🏪'
);
?>

<div class="wrap livraison-orders-wrap">
    <h1 class="wp-heading-inline"><?php esc_html_e( 'Orders', 'sendi-api' ); ?></h1>
    
    <?php if ( isset( $_GET['force_updated'] ) ) : ?>
        <div class="notice notice-success is-dismissible">
            <p><?php esc_html_e( '✅ Statuses updated successfully!', 'sendi-api' ); ?></p>
        </div>
    <?php endif; ?>
    
    <!-- ✅ BOUTON FORCE UPDATE -->
    <div style="margin: 15px 0; padding: 15px; background: #f0f7ff; border-radius: 5px; border-left: 4px solid #007cba;">
        <a href="<?php echo esc_url( admin_url( 'admin-post.php?action=livraison_force_update' ) ); ?>" 
           class="button button-primary">
            <span class="dashicons dashicons-update" style="margin-top: 3px;"></span>
            <?php esc_html_e( 'Force Sync Statuses', 'sendi-api' ); ?>
        </a>
        <span style="font-size: 12px; color: #666; margin-left: 10px;">
            <?php esc_html_e( 'Manually synchronize all order statuses with SendiAPI', 'sendi-api' ); ?>
        </span>
    </div>
    
    <div class="livraison-orders-header">
        <div class="livraison-orders-stats">
            <?php foreach ( $livraison_status_counts as $livraison_key => $livraison_count ) : ?>
            <a href="<?php echo esc_url( add_query_arg( array( 
                'status' => $livraison_key, 
                'paged' => 1,
                'livraison_orders_nonce' => wp_create_nonce( 'livraison_orders_search' )
            ), admin_url( 'admin.php?page=sendi-api-orders' ) ) ); ?>"
                class="livraison-stat-item <?php echo $livraison_status_filter === $livraison_key ? 'active' : ''; ?>">
                    <span class="livraison-stat-count"><?php echo esc_html( $livraison_count ); ?></span>
                    <span class="livraison-stat-label">
                        <?php 
                        if ( $livraison_key === 'all' ) {
                            esc_html_e( 'All', 'sendi-api' );
                        } else {
                            echo esc_html( isset( $livraison_status_labels[ $livraison_key ] ) ? $livraison_status_labels[ $livraison_key ] : ucfirst( $livraison_key ) );
                        }
                        ?>
                    </span>
                </a>
            <?php endforeach; ?>
        </div>
        
        <div class="livraison-orders-search">
            <form method="get" action="">
                <?php wp_nonce_field( 'livraison_orders_search', 'livraison_orders_nonce' ); ?>
                <input type="hidden" name="page" value="sendi-api-orders" />
                <input type="hidden" name="status" value="<?php echo esc_attr( $livraison_status_filter ); ?>" />
                <input type="search" 
                       name="s" 
                       value="<?php echo esc_attr( $livraison_search ); ?>" 
                       placeholder="<?php esc_attr_e( 'Search orders...', 'sendi-api' ); ?>" />
                <button type="submit" class="button"><?php esc_html_e( 'Search', 'sendi-api' ); ?></button>
                <a href="<?php echo esc_url( admin_url( 'admin.php?page=sendi-api-orders' ) ); ?>" class="button">
                    <?php esc_html_e( 'Reset', 'sendi-api' ); ?>
                </a>
            </form>
        </div>
    </div>
    
    <?php if ( empty( $livraison_orders ) ) : ?>
        <div class="livraison-empty-state">
            <span class="dashicons dashicons-cart"></span>
            <h2><?php esc_html_e( 'No orders found', 'sendi-api' ); ?></h2>
            <p><?php esc_html_e( 'Orders will appear here once they are sent to the Sendi API.', 'sendi-api' ); ?></p>
        </div>
    <?php else : ?>
        <div class="livraison-orders-table-wrap">
            <table class="wp-list-table widefat fixed striped livraison-orders-table">
                <thead>
                    <tr>
                        <th><?php esc_html_e( 'Order ID', 'sendi-api' ); ?></th>
                        <th><?php esc_html_e( 'Course ID', 'sendi-api' ); ?></th>
                        <th><?php esc_html_e( 'Client', 'sendi-api' ); ?></th>
                        <th><?php esc_html_e( 'Payer', 'sendi-api' ); ?></th>
                        <th><?php esc_html_e( 'Delivery Price', 'sendi-api' ); ?></th>
                        <th><?php esc_html_e( 'Order Total', 'sendi-api' ); ?></th>
                        <th><?php esc_html_e( 'Commune', 'sendi-api' ); ?></th>
                        <th><?php esc_html_e( 'Delivery Agency', 'sendi-api' ); ?></th>
                        <th><?php esc_html_e( 'Status', 'sendi-api' ); ?></th>
                        <th><?php esc_html_e( 'Date', 'sendi-api' ); ?></th>
                        <th><?php esc_html_e( 'Actions', 'sendi-api' ); ?></th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ( $livraison_orders as $livraison_order ) : 
                        // ✅ Variables préfixées
                        $livraison_payer_type = isset( $livraison_order->payer_type ) ? $livraison_order->payer_type : 'client';
                        $livraison_is_free = isset( $livraison_order->is_free ) ? (int) $livraison_order->is_free : 0;
                        $livraison_payer_label = isset( $livraison_payer_labels[ $livraison_payer_type ] ) ? $livraison_payer_labels[ $livraison_payer_type ] : ucfirst( $livraison_payer_type );
                        $livraison_payer_color = isset( $livraison_payer_colors[ $livraison_payer_type ] ) ? $livraison_payer_colors[ $livraison_payer_type ] : '#6b7280';
                        $livraison_payer_icon = isset( $livraison_payer_icons[ $livraison_payer_type ] ) ? $livraison_payer_icons[ $livraison_payer_type ] : '👤';
                        
                        // ✅ Récupérer le prix de livraison
                        $livraison_delivery_price = isset( $livraison_order->price ) ? floatval( $livraison_order->price ) : 0;
                        
                        // ✅ Récupérer le total de la commande WooCommerce
                        $livraison_order_total = 0;
                        $livraison_wc_order = wc_get_order( $livraison_order->order_id );
                        if ( $livraison_wc_order ) {
                            $livraison_order_total = $livraison_wc_order->get_total();
                        }
                        
                        // ✅ Affichage du payeur
                        $livraison_payer_display = $livraison_payer_icon . ' ' . $livraison_payer_label;
                        if ( $livraison_is_free || $livraison_payer_type === 'commercant' ) {
                            $livraison_payer_display .= ' 🆓';
                        }
                    ?>
                    <tr>
                        <td>
                            <a href="<?php echo esc_url( admin_url( 'post.php?post=' . (int) $livraison_order->order_id . '&action=edit' ) ); ?>">
                                #<?php echo esc_html( $livraison_order->order_id ); ?>
                            </a>
                        </td>
                        <td>
                            <code><?php echo esc_html( $livraison_order->course_id ); ?></code>
                            <?php if ( ! empty( $livraison_order->code_secret ) ) : ?>
                                <br />
                                <span class="livraison-code-secret">
                                    <?php esc_html_e( 'Secret:', 'sendi-api' ); ?> 
                                    <?php echo esc_html( $livraison_order->code_secret ); ?>
                                </span>
                            <?php endif; ?>
                        </td>
                        <td>
                            <strong><?php echo esc_html( $livraison_order->client_name ?: 'N/A' ); ?></strong>
                            <br />
                            <small><?php echo esc_html( $livraison_order->client_phone ?: '' ); ?></small>
                        </td>
                        <td>
                            <span style="color: <?php echo esc_attr( $livraison_payer_color ); ?>; font-weight: bold;">
                                <?php echo esc_html( $livraison_payer_display ); ?>
                            </span>
                            <?php if ( $livraison_is_free || $livraison_payer_type === 'commercant' ) : ?>
                                <br />
                                <small style="color: #22c55e;">
                                    <?php esc_html_e( '(Free delivery)', 'sendi-api' ); ?>
                                </small>
                            <?php endif; ?>
                        </td>
                        <td>
                            <?php 
                            if ( $livraison_delivery_price > 0 ) {
                                echo '<strong style="color: #1e40af;">' . wp_kses_post( wc_price( $livraison_delivery_price ) ) . '</strong>';
                            } else {
                                echo '<span style="color: #999;">' . esc_html__( 'Free', 'sendi-api' ) . '</span>';
                            }
                            ?>
                        </td>
                        <td>
                            <?php 
                            if ( $livraison_order_total > 0 ) {
                                echo '<strong>' . wp_kses_post( wc_price( $livraison_order_total ) ) . '</strong>';
                            } else {
                                echo '<span style="color: #999;">—</span>';
                            }
                            ?>
                        </td>
                        <td><?php echo esc_html( $livraison_order->client_commune ?: 'N/A' ); ?></td>
                        <td>
                            <?php if ( ! empty( $livraison_order->agence_name ) ) : ?>
                                <div class="livraison-delivery-info">
                                    <strong><?php echo esc_html( $livraison_order->agence_name ); ?></strong>
                                    <?php if ( ! empty( $livraison_order->agence_phone ) ) : ?>
                                        <br />
                                        <small class="livraison-agency-phone">
                                            <span class="dashicons dashicons-phone"></span>
                                            <?php echo esc_html( $livraison_order->agence_phone ); ?>
                                        </small>
                                    <?php endif; ?>
                                    <?php if ( ! empty( $livraison_order->agence_email ) ) : ?>
                                        <br />
                                        <small class="livraison-agency-email">
                                            <span class="dashicons dashicons-email"></span>
                                            <?php echo esc_html( $livraison_order->agence_email ); ?>
                                        </small>
                                    <?php endif; ?>
                                </div>
                            <?php else : ?>
                                <span class="livraison-text-muted"><?php esc_html_e( 'Not assigned', 'sendi-api' ); ?></span>
                            <?php endif; ?>
                        </td>
                        <td>
                            <span class="livraison-status" style="background: <?php echo esc_attr( isset( $livraison_status_colors[ $livraison_order->status ] ) ? $livraison_status_colors[ $livraison_order->status ] : '#6b7280' ); ?>;">
                                <?php echo esc_html( isset( $livraison_status_labels[ $livraison_order->status ] ) ? $livraison_status_labels[ $livraison_order->status ] : ucfirst( $livraison_order->status ) ); ?>
                            </span>
                        </td>
                        <td>
                            <?php 
                            $livraison_timestamp = strtotime( $livraison_order->created_at );
                            if ( $livraison_timestamp ) {
                                echo esc_html( date_i18n( get_option( 'date_format' ), $livraison_timestamp ) );
                                ?>
                                <br />
                                <small>
                                    <?php echo esc_html( date_i18n( get_option( 'time_format' ), $livraison_timestamp ) ); ?>
                                </small>
                                <?php
                            } else {
                                echo esc_html( $livraison_order->created_at );
                            }
                            ?>
                        </td>
                        <td>
                            <div class="livraison-actions">
                                <a href="<?php echo esc_url( admin_url( 'post.php?post=' . (int) $livraison_order->order_id . '&action=edit' ) ); ?>"
                                    class="button button-small" 
                                   title="<?php esc_attr_e( 'View Order', 'sendi-api' ); ?>">
                                    <span class="dashicons dashicons-visibility"></span>
                                </a>
                                <?php if ( ! empty( $livraison_order->course_id ) ) : ?>
                                    <button class="button button-small livraison-track-btn" 
                                            data-course="<?php echo esc_attr( $livraison_order->course_id ); ?>"
                                            title="<?php esc_attr_e( 'Track', 'sendi-api' ); ?>">
                                        <span class="dashicons dashicons-location"></span>
                                    </button>
                                <?php endif; ?>
                            </div>
                        </td>
                    </tr>
                <?php endforeach; ?>
                </tbody>
            </table>
        </div>
        
        <?php if ( $livraison_total_pages > 1 ) : ?>
            <div class="livraison-pagination">
                <?php 
                $livraison_paginate_args = array(
                    'base' => add_query_arg( 'paged', '%#%' ),
                    'format' => '',
                    'prev_text' => '&laquo;',
                    'next_text' => '&raquo;',
                    'total' => $livraison_total_pages,
                    'current' => $livraison_current_page,
                    'add_args' => array(
                        'status' => $livraison_status_filter,
                        's' => $livraison_search,
                        'livraison_orders_nonce' => wp_create_nonce( 'livraison_orders_search' )
                    )
                );
                echo wp_kses_post( paginate_links( $livraison_paginate_args ) );
                ?>
            </div>
        <?php endif; ?>
    <?php endif; ?>
</div>

<!-- Track Modal -->
<div id="livraison-track-modal" style="display: none;">
    <div class="livraison-modal-backdrop"></div>
    <div class="livraison-modal-content">
        <div class="livraison-modal-header">
            <h3><?php esc_html_e( 'Track Order', 'sendi-api' ); ?></h3>
            <button class="livraison-modal-close">&times;</button>
        </div>
        <div class="livraison-modal-body" id="livraison-track-content">
            <div class="livraison-loading"><?php esc_html_e( 'Loading...', 'sendi-api' ); ?></div>
        </div>
    </div>
</div>