<?php 

// Exit if accessed directly
if (!defined('ABSPATH')) {
    exit;
}

// Enqueue required assets
function dacdb_documents_enqueue_assets() {
    // Enqueue Font Awesome if not already loaded
    if (!wp_style_is('font-awesome', 'enqueued') && 
        !wp_style_is('fontawesome', 'enqueued') && 
        !wp_style_is('fontawesome-all', 'enqueued') && 
        !wp_style_is('fontawesome-latest', 'enqueued') && 
        !wp_style_is('fa', 'enqueued') && 
        !wp_style_is('font-awesome-6', 'enqueued') && 
        !wp_script_is('font-awesome-kit', 'enqueued')) {
        wp_enqueue_style(
            'font-awesome',
            'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css',
            array(),
            '6.5.1'
        );
    }
    
    // Enqueue our file icons CSS
    dacdb_enqueue_file_icons_css();
    
    // Enqueue the documents CSS
    wp_enqueue_style('dacdb-documents');
}
add_action('wp_enqueue_scripts', 'dacdb_documents_enqueue_assets');

function dacdb_documents($atts)
{
    global $fDebug, $data_path, $file_path, $options;
    $options = get_mmp_options();

    $documents = '';
    $account_id = isset($options['dacdb_district']) ? $options['dacdb_district'] : '';
    $club_id = isset($options['dacdb_club']) ? $options['dacdb_club'] : '';
    $icon = isset($atts['icon']) ? normalize_boolean($atts['icon']) : 1;
    $size = isset($atts['size']) ? $atts['size'] : '0';
    $date = isset($atts['date']) ? $atts['date'] : '0';
    $folder = isset($_GET['folder']) ? $_GET['folder'] : (isset($atts['folder']) ? $atts['folder'] : '');
    $folder2 = isset($_GET['folder2']) ? isset($_GET['folder2']) : (isset($atts['folder2']) ? isset($atts['folder2']) : '');
    $level = isset($folder) ? 1 : 0;
    $sort = "";
    $current_url = "";

    if ($fDebug && dacdb_is_admin()) {
        $documents .= "=================================================================<BR>";
        $documents .= "function dacdb_documents called<br>";
        $documents .= "AccountID=" . (isset($options['dacdb_district']) ? $options['dacdb_district'] : '') . "<br>";
        $documents .= "ClubID=" . (isset($options['dacdb_club']) ? $options['dacdb_club'] : '') . "<br>";
        $documents .= "folder=" . (isset($folder) ? $folder : '') . "<br>";
        $documents .= "icon=" . (isset($icon) ? $icon : '') . "<br>";
        $documents .= "size=" . (isset($size) ? $size : '') . "<br>";
        $documents .= "date=" . (isset($date) ? $date : '') . "<br>";
        $documents .= "current_url=" . (isset($current_url) ? $current_url : '') . "<br>";
        $documents .= "path=" . (isset($file_path) ? $file_path : '') . "<br>";
        $documents .= "url=" . (isset($data_path) ? $data_path : '') . 'documents.php?AccountID=' . (isset($options['dacdb_district']) ? $options['dacdb_district'] : '') . '&ClubID=' . (isset($options['dacdb_club']) ? $options['dacdb_club'] : '') . '&folder=' . (isset($folder) ? $folder : '') . '&folder2=' . (isset($folder2) ? $folder2 : '') . '&sort=' . (isset($sort) ? $sort : '') . "<br>";
        $documents .= "=================================================================<BR>";
    }

    $url = (isset($data_path) ? $data_path : '') . 'documents.php?AccountID=' . (isset($options['dacdb_district']) ? $options['dacdb_district'] : '') . '&ClubID=' . (isset($options['dacdb_club']) ? $options['dacdb_club'] : '') . '&Folder=' . (isset($folder) ? $folder : '') . '&Folder2=' . (isset($folder2) ? $folder2 : '') . '&sort=' . (isset($sort) ? $sort : '') . '&R=' . rand();
    
    // Load XML using the robust utility function
    $xml = dacdb_load_xml($url, 'documents');
    
    if ($xml === false) {
        // Provide user-friendly error message with support link
        $support_url = defined('DACDB_SUPPORT_URL') ? DACDB_SUPPORT_URL : '#';
        $documents .= '<div class="dacdb-error">';
        $documents .= '<p>Unable to retrieve documents at this time.</p>';
        $documents .= '<p>If you believe there should be documents here or you aren\'t seeing what you expect, please <a href="' . esc_url($support_url) . '" target="_blank">contact customer support</a>.</p>';
        $documents .= '</div>';
        $documents .= '</div>'; // Close the dacdb-documents div
        return $documents;
    }
    
    if ($xml->count() == 0) {
        $documents .= 'There are no documents to display at this time.';
        return $documents;
    }

    $counter = 1;
    $documents .= '<div class="dacdb-documents">';
    
    // Breadcrumbs
    $documents .= '<div class="breadcrumbs"> ';
    if ($level == 1) {
        if ($folder && $folder2 == '') {
            $documents .= '' . $folder;
        } elseif ($folder2) {
            $documents .= '<a href="' . $current_url . '?folder=' . $folder . '">' . $folder . '</a> > ' . $folder2 . '';
        }
    } else {
        if ($folder && $folder2 == '') {
            $documents .= '<a href="' . $file_path . '">Documents</a> > ' . $folder;
        } elseif ($folder2) {
            $documents .= '<a href="' . $file_path . '&">Documents</a> > <a href="' . $file_path . '&folder=' . $folder . '">' . $folder . '</a> > ' . $folder2 . '';
        }
    }
    $documents .= '</div>';

    $icon_header = ($icon === 1) ? '<th width="36">&nbsp;</th>' : '';
    $size_header = ($size == 1) ? '<th data-sort="int">Size</th>' : '';
    $date_header = ($date == 1) ? '<th data-sort="int">Modified</th>' : '';

    $documents .= '<div class="row">
        <div class="dac-col-md-12">
        <table class="table">
            <thead>
            <tr>
            ' . $icon_header . '
            <th data-sort="string">File Name</th>
            ' . $size_header . '
            ' . $date_header . '
            </tr>
            </thead>
            <tbody>';

    if (!empty($xml->document)) {
        foreach ($xml->document as $document) {
            $name = preg_replace('/\\.[^.\\s]{3,4}$/', '', $document->name);

            if ($document->type == 0) {
                if ($folder && $folder2) {
                    // do nothing
                } else {
                    $documents .= '<tr>';
                    if ($icon === 1) {
                        if ($folder) {
                            $documents .= '<td><i class="fas fa-folder dacdb-file-icon dacdb-icon-folder"></i></td><td><a href="' . $current_url . '?folder=' . $folder . '&folder2=' . $document->name . '">' . $name . '</a></td>';
                        } else {
                            $documents .= '<td><i class="fas fa-folder dacdb-file-icon dacdb-icon-folder"></i></td><td><a href="' . $current_url . '?folder=' . $name . '">' . $name . '</a></td>';
                        }
                    } else {
                        if ($folder) {
                            $documents .= '<td><a href="' . $current_url . '?folder=' . $folder . '&folder2=' . $document->name . '">' . trim($name) . '</a></td>';
                        } else {
                            $documents .= '<td><a href="' . $current_url . '?folder=' . $name . '">' . trim($name) . '</a></td>';
                        }
                    }

                    if ($size == 1) {
                        $documents .= '<td>-</td>';
                    }

                    if ($date == 1) {
                        $documents .= '<td>-</td>';
                    }
                    $documents .= '</tr>';
                    $counter = $counter + 1;
                }
            } else {
                $extension = substr(strrchr($document->name, '.'), 1);
                if ($extension == '') {
                    $extension = '__blank';
                }
                if ($icon === 1) {
                    $documents .= '<tr><td>' . dacdb_get_file_icon($extension) . '</td>';
                } else {
                    $documents .= '<tr>';
                }

                if ($extension == 'URL') {
                    $getURL = false;
                    $url_path = '';

                    if ($folder && $folder2 == '') {
                        $url_path = $file_path . $options['dacdb_district'] . '/Downloads/' . rawurlencode($options['dacdb_club']) . '/' . rawurlencode($folder) . '/' . rawurlencode($document->name);
                    } elseif ($folder && $folder2) {
                        $url_path = $file_path . $options['dacdb_district'] . '/Downloads/' . rawurlencode($options['dacdb_club']) . '/' . rawurlencode($folder) . '/' . rawurlencode($folder2) . '/' . rawurlencode($document->name);
                    } else {
                        $url_path = $file_path . $options['dacdb_district'] . '/Downloads/' . rawurlencode($options['dacdb_club']) . '/' . rawurlencode($document->name);
                    }

                    // Try to get the URL content with error handling
                    $getURL = @file_get_contents($url_path);
                    if ($getURL === false) {
                        // If file_get_contents fails, try to extract URL from the file name
                        $getURL = str_replace('.URL', '', $document->name);
                    }

                    // Ensure URL has proper protocol
                    if (strpos($getURL, "http://") === false && strpos($getURL, "https://") === false) {
                        $getURL = 'https://' . $getURL;
                    }
                } else {
                    if ($folder && $folder2 == '') {
                        $getURL = $file_path . $options['dacdb_district'] . '/Downloads/' . $options['dacdb_club'] . '/' . $folder . '/' . $document->name;
                    } elseif ($folder && $folder2) {
                        $getURL = $file_path . $options['dacdb_district'] . '/Downloads/' . $options['dacdb_club'] . '/' . $folder . '/' . $folder2 . '/' . $document->name;
                    } else {
                        $getURL = $file_path . $options['dacdb_district'] . '/Downloads/' . $options['dacdb_club'] . '/' . trim($document->name);
                    }
                }

                $documents .= '<td><a href="' . $getURL . '" target="__blank">' . $document->name . '</a></td>';
                if ($size == 1) {
                    $documents .= '<td>' . $document->size . '</td>';
                }
                if ($date == 1) {
                    $documents .= '<td>' . $document->modded . '</td>';
                }
                $documents .= '</tr>';
                $counter = $counter + 1;
            }
        }
    } else {
        $documents .= '<tr><td colspan="4"><strong>There are no documents available at this time.</strong></td></tr>';
    }
    $documents .= '</tbody></table></div></div>';
    $documents .= '</div>';
    return $documents;
}