// Jira Issue Picker JavaScript
(function() {
    'use strict';
    
    let isInitializing = true;
    let jiraIssues = [];
    const selectionState = {};

    function initializeJiraIssuePicker() {
        renderJiraIssues();
        setupToggle();
        
        isInitializing = false;
    }

    function setupToggle() {
        $('#jira-issue-toggle').on('click', function() {
            const arrow = $(this).find('.picker-arrow');
            const content = $('#jira-issue-content');
            
            arrow.toggleClass('collapsed');
            content.toggleClass('collapsed');
        });
    }

    function renderJiraIssues() {
        const container = $('#jira-issue-content');
        container.empty();

        if (jiraIssues.length === 0) {
            container.append('<div style="padding: 10px; color: #999;">No Jira issues found for selected periods</div>');
            return;
        }

        // Add "All issues" checkbox at the top
        const allIssuesItem = createAllIssuesCheckbox();
        container.append(allIssuesItem);

        jiraIssues.forEach(issue => {
            const item = createJiraIssueItem(issue);
            container.append(item);
        });
        
        // Update "All issues" checkbox state after it's in the DOM
        updateAllIssuesCheckbox();
    }

    function createAllIssuesCheckbox() {
        const itemDiv = $('<div>')
            .addClass('jira-issue-item')
            .css({
                'font-weight': 'bold',
                'background': '#f9f9f9',
                'border-bottom': '2px solid #d4d4d4'
            });
        
        const checkbox = $('<input>')
            .attr('type', 'checkbox')
            .attr('id', 'all-issues-checkbox')
            .addClass('jira-issue-checkbox')
            .on('change', function() {
                const isChecked = $(this).is(':checked');
                if (isChecked) {
                    selectAll();
                } else {
                    clearSelection();
                }
            });
        
        const label = $('<label>')
            .addClass('jira-issue-label')
            .attr('for', 'all-issues-checkbox')
            .text('All issues')
            .css('font-weight', 'bold')
            .on('click', function(e) {
                e.preventDefault();
                checkbox.prop('checked', !checkbox.prop('checked')).trigger('change');
            });
        
        itemDiv.append(checkbox).append(label);
        return itemDiv;
    }

    function updateAllIssuesCheckbox() {
        const selectedCount = getSelectedJiraIssues().length;
        const totalCount = jiraIssues.length;
        const checkbox = $('#all-issues-checkbox');
        
        if (checkbox.length === 0) return;
        
        if (selectedCount === 0) {
            checkbox.prop('checked', false);
            checkbox.prop('indeterminate', false);
        } else if (selectedCount === totalCount) {
            checkbox.prop('checked', true);
            checkbox.prop('indeterminate', false);
        } else {
            checkbox.prop('checked', false);
            checkbox.prop('indeterminate', true);
        }
    }

    function createJiraIssueItem(issue) {
        const itemDiv = $('<div>').addClass('jira-issue-item');
        
        const checkbox = $('<input>')
            .attr('type', 'checkbox')
            .addClass('jira-issue-checkbox')
            .attr('data-issue', issue)
            .prop('checked', selectionState[issue])
            .on('change', function() {
                onJiraIssueCheckboxChange(issue, $(this).is(':checked'));
            });
        
        const label = $('<label>')
            .addClass('jira-issue-label')
            .text(issue)
            .on('click', function(e) {
                e.preventDefault();
                checkbox.prop('checked', !checkbox.prop('checked')).trigger('change');
            });
        
        itemDiv.append(checkbox).append(label);
        return itemDiv;
    }

    function onJiraIssueCheckboxChange(issue, checked) {
        selectionState[issue] = checked;
        
        // Update "All issues" checkbox state
        updateAllIssuesCheckbox();
        
        if (!isInitializing) {
            logSelection();
        }
    }

    function logSelection() {
        const selected = getSelectedJiraIssues();
        console.log('Selected Jira Issues:', selected);
        
        // Trigger event to reload table if it's visible
        const isTableVisible = $('.worklog-data-content').length > 0;
        if (isTableVisible && !isInitializing) {
            $(document).trigger('jiraIssueSelectionChanged');
        }
    }

    function getSelectedJiraIssues() {
        return jiraIssues.filter(issue => selectionState[issue]);
    }

    function loadJiraIssues(periods, hourType, classification, callback) {
        const token = sessionStorage.getItem('pgad_token');
        const periodsParam = JSON.stringify(periods || []);
        
        let url = '/api/jira/issues?periods=' + encodeURIComponent(periodsParam) + 
                  '&hourType=' + encodeURIComponent(hourType) +
                  '&classification=' + encodeURIComponent(classification);
        
        // If admin and organization selected, include viewAsOrg
        if (window.SimpleAuth && SimpleAuth.isAdmin() && SimpleAuth.selectedOrganization) {
            url += '&viewAsOrg=' + encodeURIComponent(SimpleAuth.selectedOrganization);
        }
        
        $.ajax({
            url: url,
            method: 'GET',
            headers: token ? { 'X-Auth-Token': token } : {},
            success: function(data) {
                jiraIssues = data.issues || [];
                
                // Initialize all issues as selected by default
                jiraIssues.forEach(issue => {
                    if (!(issue in selectionState)) {
                        selectionState[issue] = true;
                    }
                });
                
                renderJiraIssues();
                
                if (callback) callback();
            },
            error: function(xhr) {
                console.error('Error loading Jira issues:', xhr);
                jiraIssues = [];
                renderJiraIssues();
            }
        });
    }

    function clearSelection() {
        jiraIssues.forEach(issue => {
            selectionState[issue] = false;
        });
        renderJiraIssues();
        logSelection();
    }

    function selectIssue(issue) {
        if (jiraIssues.includes(issue)) {
            selectionState[issue] = true;
            renderJiraIssues();
            logSelection();
        }
    }

    function deselectIssue(issue) {
        if (jiraIssues.includes(issue)) {
            selectionState[issue] = false;
            renderJiraIssues();
            logSelection();
        }
    }

    function selectAll() {
        jiraIssues.forEach(issue => {
            selectionState[issue] = true;
        });
        renderJiraIssues();
        logSelection();
    }

    // Public API
    window.JiraIssuePicker = {
        getSelection: getSelectedJiraIssues,
        clearAll: clearSelection,
        selectIssue: selectIssue,
        deselectIssue: deselectIssue,
        selectAll: selectAll,
        loadIssues: loadJiraIssues,
        refresh: function(year, hourType, classification, callback) {
            loadJiraIssues(year, hourType, classification, callback);
        },
        getIssueCount: function() { return jiraIssues.length; }
    };

    // Initialize on document ready
    $(document).ready(function() {
        initializeJiraIssuePicker();
    });

})();
