{% load l10n %}
<!-- Вкладка фильтров и экспорта -->
<form method="get" id="filterForm" class="mb-4">
    <input type="hidden" name="tab" value="filters">
    <div class="card">
        <div class="card-header">
            <h5 class="mb-0">Фильтры</h5>
        </div>
        <div class="card-body">
            <div class="row">
                <!-- Спутники -->
                <div class="col-md-3 mb-3">
                    <label for="{{ form.satellites.id_for_label }}" class="form-label">{{ form.satellites.label }}</label>
                    <div class="d-flex justify-content-between mb-1">
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('satellites', true)">Выбрать</button>
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('satellites', false)">Снять</button>
                    </div>
                    {{ form.satellites }}
                    <small class="form-text text-muted">Удерживайте Ctrl для выбора нескольких</small>
                </div>
                
                <!-- Полоса спутника -->
                <div class="col-md-3 mb-3">
                    <label for="{{ form.band.id_for_label }}" class="form-label">{{ form.band.label }}</label>
                    <div class="d-flex justify-content-between mb-1">
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('band', true)">Выбрать</button>
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('band', false)">Снять</button>
                    </div>
                    {{ form.band }}
                    <small class="form-text text-muted">Удерживайте Ctrl для выбора нескольких</small>
                </div>
                
                <!-- Поляризация -->
                <div class="col-md-3 mb-3">
                    <label for="{{ form.polarization.id_for_label }}" class="form-label">{{ form.polarization.label }}</label>
                    <div class="d-flex justify-content-between mb-1">
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('polarization', true)">Выбрать</button>
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('polarization', false)">Снять</button>
                    </div>
                    {{ form.polarization }}
                    <small class="form-text text-muted">Удерживайте Ctrl для выбора нескольких</small>
                </div>
                
                <!-- Модуляция -->
                <div class="col-md-3 mb-3">
                    <label for="{{ form.modulation.id_for_label }}" class="form-label">{{ form.modulation.label }}</label>
                    <div class="d-flex justify-content-between mb-1">
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('modulation', true)">Выбрать</button>
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('modulation', false)">Снять</button>
                    </div>
                    {{ form.modulation }}
                    <small class="form-text text-muted">Удерживайте Ctrl для выбора нескольких</small>
                </div>
            </div>
            
            <div class="row">
                <!-- Центральная частота -->
                <div class="col-md-3 mb-3">
                    <label class="form-label">Центральная частота (МГц)</label>
                    <div class="input-group">
                        {{ form.frequency_min }}
                        <span class="input-group-text">—</span>
                        {{ form.frequency_max }}
                    </div>
                </div>
                
                <!-- Полоса -->
                <div class="col-md-3 mb-3">
                    <label class="form-label">Полоса (МГц)</label>
                    <div class="input-group">
                        {{ form.freq_range_min }}
                        <span class="input-group-text">—</span>
                        {{ form.freq_range_max }}
                    </div>
                </div>
                
                <!-- Тип объекта -->
                <div class="col-md-3 mb-3">
                    <label for="{{ form.object_type.id_for_label }}" class="form-label">{{ form.object_type.label }}</label>
                    <div class="d-flex justify-content-between mb-1">
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('object_type', true)">Выбрать</button>
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('object_type', false)">Снять</button>
                    </div>
                    {{ form.object_type }}
                    <small class="form-text text-muted">Удерживайте Ctrl для выбора нескольких</small>
                </div>
                
                <!-- Принадлежность объекта -->
                <div class="col-md-3 mb-3">
                    <label for="{{ form.object_ownership.id_for_label }}" class="form-label">{{ form.object_ownership.label }}</label>
                    <div class="d-flex justify-content-between mb-1">
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('object_ownership', true)">Выбрать</button>
                        <button type="button" class="btn btn-sm btn-outline-secondary"
                            onclick="selectAllOptions('object_ownership', false)">Снять</button>
                    </div>
                    {{ form.object_ownership }}
                    <small class="form-text text-muted">Удерживайте Ctrl для выбора нескольких</small>
                </div>
            </div>
            
            <div class="row">
                <!-- Количество ObjItem -->
                <div class="col-md-3 mb-3">
                    <label class="form-label">Количество привязанных точек ГЛ</label>
                    <div class="input-group mb-2">
                        {{ form.objitem_count_min }}
                    </div>
                    <div class="input-group">
                        {{ form.objitem_count_max }}
                    </div>
                </div>
                
                <!-- Планы на Кубсат -->
                <div class="col-md-3 mb-3">
                    <label class="form-label">{{ form.has_plans.label }}</label>
                    <div>
                        {% for radio in form.has_plans %}
                            <div class="form-check">
                                {{ radio.tag }}
                                <label class="form-check-label" for="{{ radio.id_for_label }}">
                                    {{ radio.choice_label }}
                                </label>
                            </div>
                        {% endfor %}
                    </div>
                </div>
                
                <!-- ГСО успешно -->
                <div class="col-md-3 mb-3">
                    <label class="form-label">{{ form.success_1.label }}</label>
                    <div>
                        {% for radio in form.success_1 %}
                            <div class="form-check">
                                {{ radio.tag }}
                                <label class="form-check-label" for="{{ radio.id_for_label }}">
                                    {{ radio.choice_label }}
                                </label>
                            </div>
                        {% endfor %}
                    </div>
                </div>
                
                <!-- Кубсат успешно -->
                <div class="col-md-3 mb-3">
                    <label class="form-label">{{ form.success_2.label }}</label>
                    <div>
                        {% for radio in form.success_2 %}
                            <div class="form-check">
                                {{ radio.tag }}
                                <label class="form-check-label" for="{{ radio.id_for_label }}">
                                    {{ radio.choice_label }}
                                </label>
                            </div>
                        {% endfor %}
                    </div>
                </div>
            </div>
            
            <div class="row">
                <!-- Диапазон дат -->
                <div class="col-md-6 mb-3">
                    <label class="form-label">Диапазон дат ГЛ:</label>
                    <div class="input-group">
                        {{ form.date_from }}
                        <span class="input-group-text">—</span>
                        {{ form.date_to }}
                    </div>
                </div>
            </div>
            
            <div class="row">
                <div class="col-12">
                    <button type="submit" class="btn btn-primary">Применить фильтры</button>
                    <a href="{% url 'mainapp:kubsat' %}" class="btn btn-secondary">Сбросить</a>
                </div>
            </div>
        </div>
    </div>
</form>

<!-- Кнопка экспорта и статистика -->
{% if sources_with_date_info %}
<div class="row mb-3">
    <div class="col-12">
        <div class="card">
            <div class="card-body">
                <div class="d-flex flex-wrap align-items-center gap-3">
                    <!-- Поиск по имени точки -->
                    <div class="input-group" style="max-width: 350px;">
                        <input type="text" id="searchObjitemName" class="form-control" 
                            placeholder="Поиск по имени точки..." 
                            oninput="filterTableByName()">
                        <button type="button" class="btn btn-outline-secondary" onclick="clearSearch()">
                            <i class="bi bi-x-lg"></i>
                        </button>
                    </div>
                    <button type="button" class="btn btn-success" onclick="exportToExcel()">
                        <i class="bi bi-file-earmark-excel"></i> Экспорт в Excel
                    </button>
                    <button type="button" class="btn btn-primary" onclick="createRequestsFromTable()">
                        <i class="bi bi-plus-circle"></i> Создать заявки
                    </button>
                    <span class="text-muted" id="statsCounter">
                        Найдено объектов: {{ sources_with_date_info|length }}, 
                        точек: {% for source_data in sources_with_date_info %}{{ source_data.objitems_data|length }}{% if not forloop.last %}+{% endif %}{% endfor %}
                    </span>
                </div>
            </div>
        </div>
    </div>
</div>
{% endif %}

<!-- Таблица результатов -->
{% if sources_with_date_info %}
<div class="row">
    <div class="col-12">
        <div class="card">
            <div class="card-body p-0">
                <div class="table-responsive" style="max-height: 60vh; overflow-y: auto;">
                    <table class="table table-striped table-hover table-sm table-bordered" style="font-size: 0.85rem;" id="resultsTable">
                        <thead class="table-dark sticky-top">
                            <tr>
                                <th style="min-width: 80px;">ID объекта</th>
                                <th style="min-width: 120px;">Тип объекта</th>
                                <th style="min-width: 150px;">Принадлежность объекта</th>
                                <th class="text-center" style="min-width: 60px;" title="Всего заявок">Заявки</th>
                                <th class="text-center" style="min-width: 80px;">ГСО</th>
                                <th class="text-center" style="min-width: 80px;">Кубсат</th>
                                <th class="text-center" style="min-width: 100px;">Статус заявки</th>
                                <th class="text-center" style="min-width: 100px;">Кол-во точек</th>
                                <th style="min-width: 150px;">Усреднённая координата</th>
                                <th style="min-width: 120px;">Имя точки</th>
                                <th style="min-width: 150px;">Спутник</th>
                                <th style="min-width: 100px;">Частота (МГц)</th>
                                <th style="min-width: 100px;">Полоса (МГц)</th>
                                <th style="min-width: 100px;">Поляризация</th>
                                <th style="min-width: 100px;">Модуляция</th>
                                <th style="min-width: 150px;">Координаты ГЛ</th>
                                <th style="min-width: 100px;">Дата ГЛ</th>
                                <th style="min-width: 150px;">Действия</th>
                            </tr>
                        </thead>
                        <tbody>
                    {% for source_data in sources_with_date_info %}
                        {% for objitem_data in source_data.objitems_data %}
                        <tr data-source-id="{{ source_data.source.id }}" 
                            data-objitem-id="{{ objitem_data.objitem.id }}"
                            data-objitem-name="{{ objitem_data.objitem.name|default:'' }}"
                            data-matches-date="{{ objitem_data.matches_date|yesno:'true,false' }}"
                            data-is-first-in-source="{% if forloop.first %}true{% else %}false{% endif %}"
                            data-lat="{% if objitem_data.objitem.geo_obj and objitem_data.objitem.geo_obj.coords %}{{ objitem_data.objitem.geo_obj.coords.y }}{% endif %}"
                            data-lon="{% if objitem_data.objitem.geo_obj and objitem_data.objitem.geo_obj.coords %}{{ objitem_data.objitem.geo_obj.coords.x }}{% endif %}">
                            
                            {% if forloop.first %}
                            <td rowspan="{{ source_data.objitems_data|length }}" class="source-id-cell">{{ source_data.source.id }}</td>
                            {% endif %}
                            
                            {% if forloop.first %}
                            <td rowspan="{{ source_data.objitems_data|length }}" class="source-type-cell">{{ source_data.source.info.name|default:"-" }}</td>
                            {% endif %}
                            
                            {% if forloop.first %}
                            <td rowspan="{{ source_data.objitems_data|length }}" class="source-ownership-cell">
                                {% if source_data.source.ownership %}
                                    {% if source_data.source.ownership.name == "ТВ" and source_data.has_lyngsat %}
                                    <a href="#" class="text-primary text-decoration-none"
                                        onclick="showLyngsatModal({{ source_data.lyngsat_id }}); return false;">
                                        <i class="bi bi-tv"></i> {{ source_data.source.ownership.name }}
                                    </a>
                                    {% else %}
                                    {{ source_data.source.ownership.name }}
                                    {% endif %}
                                {% else %}
                                    -
                                {% endif %}
                            </td>
                            {% endif %}
                            
                            {% if forloop.first %}
                            <td rowspan="{{ source_data.objitems_data|length }}" class="text-center source-requests-count-cell">
                                {% if source_data.requests_count > 0 %}
                                    <span class="badge bg-info">{{ source_data.requests_count }}</span>
                                {% else %}
                                    <span class="text-muted">0</span>
                                {% endif %}
                            </td>
                            {% endif %}
                            
                            {% if forloop.first %}
                            <td rowspan="{{ source_data.objitems_data|length }}" class="text-center source-gso-cell">
                                {% if source_data.gso_success == True %}
                                    <span class="badge bg-success"><i class="bi bi-check-lg"></i></span>
                                {% elif source_data.gso_success == False %}
                                    <span class="badge bg-danger"><i class="bi bi-x-lg"></i></span>
                                {% else %}
                                    <span class="text-muted">-</span>
                                {% endif %}
                            </td>
                            {% endif %}
                            
                            {% if forloop.first %}
                            <td rowspan="{{ source_data.objitems_data|length }}" class="text-center source-kubsat-cell">
                                {% if source_data.kubsat_success == True %}
                                    <span class="badge bg-success"><i class="bi bi-check-lg"></i></span>
                                {% elif source_data.kubsat_success == False %}
                                    <span class="badge bg-danger"><i class="bi bi-x-lg"></i></span>
                                {% else %}
                                    <span class="text-muted">-</span>
                                {% endif %}
                            </td>
                            {% endif %}
                            
                            {% if forloop.first %}
                            <td rowspan="{{ source_data.objitems_data|length }}" class="text-center source-status-cell">
                                {% if source_data.request_status %}
                                    {% if source_data.request_status_raw == 'successful' or source_data.request_status_raw == 'result_received' %}
                                        <span class="badge bg-success">{{ source_data.request_status }}</span>
                                    {% elif source_data.request_status_raw == 'unsuccessful' or source_data.request_status_raw == 'no_correlation' or source_data.request_status_raw == 'no_signal' %}
                                        <span class="badge bg-danger">{{ source_data.request_status }}</span>
                                    {% elif source_data.request_status_raw == 'planned' %}
                                        <span class="badge bg-primary">{{ source_data.request_status }}</span>
                                    {% elif source_data.request_status_raw == 'downloading' or source_data.request_status_raw == 'processing' %}
                                        <span class="badge bg-warning text-dark">{{ source_data.request_status }}</span>
                                    {% else %}
                                        <span class="badge bg-secondary">{{ source_data.request_status }}</span>
                                    {% endif %}
                                {% else %}
                                    <span class="text-muted">-</span>
                                {% endif %}
                            </td>
                            {% endif %}
                            
                            {% if forloop.first %}
                            <td rowspan="{{ source_data.objitems_data|length }}" class="text-center source-count-cell" data-initial-count="{{ source_data.objitems_data|length }}">{{ source_data.objitems_data|length }}</td>
                            {% endif %}
                            
                            {% if forloop.first %}
                            <td rowspan="{{ source_data.objitems_data|length }}" class="source-avg-coords-cell" 
                                data-avg-lat="{{ source_data.avg_lat|default:''|unlocalize }}"
                                data-avg-lon="{{ source_data.avg_lon|default:''|unlocalize }}">
                                {% if source_data.avg_lat and source_data.avg_lon %}
                                    {{ source_data.avg_lat|floatformat:6|unlocalize }}, {{ source_data.avg_lon|floatformat:6|unlocalize }}
                                {% else %}
                                    -
                                {% endif %}
                            </td>
                            {% endif %}
                            
                            <td>{{ objitem_data.objitem.name|default:"-" }}</td>
                            
                            <td>
                                {% if objitem_data.objitem.parameter_obj and objitem_data.objitem.parameter_obj.id_satellite %}
                                    {{ objitem_data.objitem.parameter_obj.id_satellite.name }}
                                    {% if objitem_data.objitem.parameter_obj.id_satellite.norad %}
                                        ({{ objitem_data.objitem.parameter_obj.id_satellite.norad }})
                                    {% endif %}
                                {% else %}
                                    -
                                {% endif %}
                            </td>
                            
                            <td>
                                {% if objitem_data.objitem.parameter_obj %}
                                    {{ objitem_data.objitem.parameter_obj.frequency|default:"-"|floatformat:3 }}
                                {% else %}
                                    -
                                {% endif %}
                            </td>
                            
                            <td>
                                {% if objitem_data.objitem.parameter_obj %}
                                    {{ objitem_data.objitem.parameter_obj.freq_range|default:"-"|floatformat:3 }}
                                {% else %}
                                    -
                                {% endif %}
                            </td>
                            
                            <td>
                                {% if objitem_data.objitem.parameter_obj and objitem_data.objitem.parameter_obj.polarization %}
                                    {{ objitem_data.objitem.parameter_obj.polarization.name }}
                                {% else %}
                                    -
                                {% endif %}
                            </td>
                            
                            <td>
                                {% if objitem_data.objitem.parameter_obj and objitem_data.objitem.parameter_obj.modulation %}
                                    {{ objitem_data.objitem.parameter_obj.modulation.name }}
                                {% else %}
                                    -
                                {% endif %}
                            </td>
                            
                            <td>
                                {% if objitem_data.objitem.geo_obj and objitem_data.objitem.geo_obj.coords %}
                                    {{ objitem_data.objitem.geo_obj.coords.y|floatformat:6|unlocalize }}, {{ objitem_data.objitem.geo_obj.coords.x|floatformat:6|unlocalize }}
                                {% else %}
                                    -
                                {% endif %}
                            </td>
                            
                            <td>
                                {% if objitem_data.geo_date %}
                                    {{ objitem_data.geo_date|date:"d.m.Y" }}
                                {% else %}
                                    -
                                {% endif %}
                            </td>
                            
                            <td>
                                <div class="btn-group" role="group">
                                    <button type="button" class="btn btn-sm btn-danger" onclick="removeObjItem(this)" title="Удалить точку">
                                        <i class="bi bi-trash"></i>
                                    </button>
                                    {% if forloop.first %}
                                    <button type="button" class="btn btn-sm btn-warning" onclick="removeSource(this)" title="Удалить весь объект">
                                        <i class="bi bi-trash-fill"></i>
                                    </button>
                                    {% endif %}
                                </div>
                            </td>
                        </tr>
                        {% endfor %}
                    {% endfor %}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>
{% elif request.GET %}
<div class="alert alert-info">
    По заданным критериям ничего не найдено.
</div>
{% endif %}

<script>
// Функция для пересчёта усреднённых координат источника через Python API
// Координаты рассчитываются на сервере с сортировкой по дате ГЛ
function recalculateAverageCoords(sourceId) {
    const sourceRows = Array.from(document.querySelectorAll(`tr[data-source-id="${sourceId}"]`));
    if (sourceRows.length === 0) return;
    
    // Собираем ID всех оставшихся точек для этого источника
    const objitemIds = sourceRows.map(row => row.dataset.objitemId).filter(id => id);
    
    if (objitemIds.length === 0) {
        // Нет точек - очищаем координаты
        updateAvgCoordsCell(sourceId, null, null);
        return;
    }
    
    // Вызываем Python API для пересчёта координат
    const formData = new FormData();
    const csrfToken = document.querySelector('[name=csrfmiddlewaretoken]');
    if (csrfToken) {
        formData.append('csrfmiddlewaretoken', csrfToken.value);
    }
    objitemIds.forEach(id => formData.append('objitem_ids', id));
    
    fetch('{% url "mainapp:kubsat_recalculate_coords" %}', {
        method: 'POST',
        headers: {
            'X-CSRFToken': csrfToken ? csrfToken.value : ''
        },
        body: formData
    })
    .then(response => response.json())
    .then(result => {
        if (result.success && result.results[sourceId]) {
            const coords = result.results[sourceId];
            updateAvgCoordsCell(sourceId, coords.avg_lat, coords.avg_lon);
        }
    })
    .catch(error => {
        console.error('Error recalculating coords:', error);
    });
}

// Обновляет ячейку с усреднёнными координатами
function updateAvgCoordsCell(sourceId, avgLat, avgLon) {
    const sourceRows = Array.from(document.querySelectorAll(`tr[data-source-id="${sourceId}"]`));
    if (sourceRows.length === 0) return;
    
    const firstRow = sourceRows[0];
    const avgCoordsCell = firstRow.querySelector('.source-avg-coords-cell');
    if (avgCoordsCell) {
        if (avgLat !== null && avgLon !== null) {
            avgCoordsCell.textContent = `${avgLat.toFixed(6)}, ${avgLon.toFixed(6)}`;
            avgCoordsCell.dataset.avgLat = avgLat;
            avgCoordsCell.dataset.avgLon = avgLon;
        } else {
            avgCoordsCell.textContent = '-';
            avgCoordsCell.dataset.avgLat = '';
            avgCoordsCell.dataset.avgLon = '';
        }
    }
}

function removeObjItem(button) {
    const row = button.closest('tr');
    const sourceId = row.dataset.sourceId;
    const isFirstInSource = row.dataset.isFirstInSource === 'true';
    const sourceRows = Array.from(document.querySelectorAll(`tr[data-source-id="${sourceId}"]`));
    
    // All rowspan cells that need to be handled
    const rowspanCellClasses = [
        '.source-id-cell', '.source-type-cell', '.source-ownership-cell', '.source-requests-count-cell',
        '.source-gso-cell', '.source-kubsat-cell', '.source-status-cell', '.source-count-cell', '.source-avg-coords-cell'
    ];
    
    if (sourceRows.length === 1) {
        row.remove();
    } else if (isFirstInSource) {
        const nextRow = sourceRows[1];
        const cells = rowspanCellClasses.map(cls => row.querySelector(cls)).filter(c => c);
        
        if (cells.length > 0) {
            const currentRowspan = parseInt(cells[0].getAttribute('rowspan'));
            const newRowspan = currentRowspan - 1;
            
            // Clone and update all rowspan cells
            const newCells = cells.map(cell => {
                const newCell = cell.cloneNode(true);
                newCell.setAttribute('rowspan', newRowspan);
                if (newCell.classList.contains('source-count-cell')) {
                    newCell.textContent = newRowspan;
                }
                return newCell;
            });
            
            // Insert cells in reverse order to maintain correct order
            newCells.reverse().forEach(cell => {
                nextRow.insertBefore(cell, nextRow.firstChild);
            });
            
            const actionsCell = nextRow.querySelector('td:last-child');
            if (actionsCell) {
                const btnGroup = actionsCell.querySelector('.btn-group');
                if (btnGroup && btnGroup.children.length === 1) {
                    const deleteSourceBtn = document.createElement('button');
                    deleteSourceBtn.type = 'button';
                    deleteSourceBtn.className = 'btn btn-sm btn-warning';
                    deleteSourceBtn.onclick = function() { removeSource(this); };
                    deleteSourceBtn.title = 'Удалить весь объект';
                    deleteSourceBtn.innerHTML = '<i class="bi bi-trash-fill"></i>';
                    btnGroup.appendChild(deleteSourceBtn);
                }
            }
        }
        nextRow.dataset.isFirstInSource = 'true';
        row.remove();
        // Пересчитываем усреднённые координаты после удаления точки
        recalculateAverageCoords(sourceId);
    } else {
        const firstRow = sourceRows[0];
        const cells = rowspanCellClasses.map(cls => firstRow.querySelector(cls)).filter(c => c);
        
        if (cells.length > 0) {
            const currentRowspan = parseInt(cells[0].getAttribute('rowspan'));
            const newRowspan = currentRowspan - 1;
            
            cells.forEach(cell => {
                cell.setAttribute('rowspan', newRowspan);
                if (cell.classList.contains('source-count-cell')) {
                    cell.textContent = newRowspan;
                }
            });
        }
        row.remove();
        // Пересчитываем усреднённые координаты после удаления точки
        recalculateAverageCoords(sourceId);
    }
    updateCounter();
}

function removeSource(button) {
    const row = button.closest('tr');
    const sourceId = row.dataset.sourceId;
    const rows = document.querySelectorAll(`tr[data-source-id="${sourceId}"]`);
    rows.forEach(r => r.remove());
    updateCounter();
}

function updateCounter() {
    const rows = document.querySelectorAll('#resultsTable tbody tr');
    const counter = document.getElementById('statsCounter');
    if (counter) {
        // Подсчитываем уникальные источники и точки (только видимые)
        const uniqueSources = new Set();
        let visibleRowsCount = 0;
        rows.forEach(row => {
            if (row.style.display !== 'none') {
                uniqueSources.add(row.dataset.sourceId);
                visibleRowsCount++;
            }
        });
        counter.textContent = `Найдено объектов: ${uniqueSources.size}, точек: ${visibleRowsCount}`;
    }
}

function exportToExcel() {
    const rows = document.querySelectorAll('#resultsTable tbody tr');
    const objitemIds = Array.from(rows).map(row => row.dataset.objitemId);
    
    if (objitemIds.length === 0) {
        alert('Нет данных для экспорта');
        return;
    }
    
    const form = document.createElement('form');
    form.method = 'POST';
    form.action = '{% url "mainapp:kubsat_export" %}';
    
    const csrfToken = document.querySelector('[name=csrfmiddlewaretoken]');
    if (csrfToken) {
        const csrfInput = document.createElement('input');
        csrfInput.type = 'hidden';
        csrfInput.name = 'csrfmiddlewaretoken';
        csrfInput.value = csrfToken.value;
        form.appendChild(csrfInput);
    }
    
    objitemIds.forEach(id => {
        const input = document.createElement('input');
        input.type = 'hidden';
        input.name = 'objitem_ids';
        input.value = id;
        form.appendChild(input);
    });
    
    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);
}

function selectAllOptions(selectName, selectAll) {
    const selectElement = document.querySelector(`select[name="${selectName}"]`);
    if (selectElement) {
        for (let i = 0; i < selectElement.options.length; i++) {
            selectElement.options[i].selected = selectAll;
        }
    }
}

function createRequestsFromTable() {
    const rows = document.querySelectorAll('#resultsTable tbody tr');
    const objitemIds = Array.from(rows).map(row => row.dataset.objitemId);
    
    if (objitemIds.length === 0) {
        alert('Нет данных для создания заявок');
        return;
    }
    
    // Подсчитываем уникальные источники
    const uniqueSources = new Set();
    rows.forEach(row => uniqueSources.add(row.dataset.sourceId));
    
    if (!confirm(`Будет создано ${uniqueSources.size} заявок (по одной на каждый источник) со статусом "Запланировано".\n\nКоординаты будут рассчитаны как среднее по выбранным точкам.\n\nПродолжить?`)) {
        return;
    }
    
    // Показываем индикатор загрузки
    const btn = event.target.closest('button');
    const originalText = btn.innerHTML;
    btn.disabled = true;
    btn.innerHTML = '<span class="spinner-border spinner-border-sm" role="status"></span> Создание...';
    
    const formData = new FormData();
    const csrfToken = document.querySelector('[name=csrfmiddlewaretoken]');
    if (csrfToken) {
        formData.append('csrfmiddlewaretoken', csrfToken.value);
    }
    
    objitemIds.forEach(id => {
        formData.append('objitem_ids', id);
    });
    
    fetch('{% url "mainapp:kubsat_create_requests" %}', {
        method: 'POST',
        headers: {
            'X-CSRFToken': csrfToken ? csrfToken.value : ''
        },
        body: formData
    })
    .then(response => response.json())
    .then(result => {
        btn.disabled = false;
        btn.innerHTML = originalText;
        
        if (result.success) {
            let message = `Создано заявок: ${result.created_count} из ${result.total_sources}`;
            if (result.errors && result.errors.length > 0) {
                message += `\n\nОшибки:\n${result.errors.join('\n')}`;
            }
            alert(message);
            // Перезагружаем страницу для обновления данных
            location.reload();
        } else {
            alert('Ошибка: ' + result.error);
        }
    })
    .catch(error => {
        btn.disabled = false;
        btn.innerHTML = originalText;
        console.error('Error creating requests:', error);
        alert('Ошибка создания заявок');
    });
}

// Фильтрация таблицы по имени точки
function filterTableByName() {
    const searchValue = document.getElementById('searchObjitemName').value.toLowerCase().trim();
    const rows = document.querySelectorAll('#resultsTable tbody tr');
    
    if (!searchValue) {
        // Показываем все строки
        rows.forEach(row => {
            row.style.display = '';
        });
        // Восстанавливаем rowspan
        recalculateRowspans();
        updateCounter();
        return;
    }
    
    // Группируем строки по source_id
    const sourceGroups = {};
    rows.forEach(row => {
        const sourceId = row.dataset.sourceId;
        if (!sourceGroups[sourceId]) {
            sourceGroups[sourceId] = [];
        }
        sourceGroups[sourceId].push(row);
    });
    
    // Фильтруем по имени точки используя data-атрибут
    Object.keys(sourceGroups).forEach(sourceId => {
        const sourceRows = sourceGroups[sourceId];
        let hasVisibleRows = false;
        
        sourceRows.forEach(row => {
            // Используем data-атрибут для получения имени точки
            const name = (row.dataset.objitemName || '').toLowerCase();
            
            if (name.includes(searchValue)) {
                row.style.display = '';
                hasVisibleRows = true;
            } else {
                row.style.display = 'none';
            }
        });
        
        // Если нет видимых строк в группе, скрываем все (включая ячейки с rowspan)
        if (!hasVisibleRows) {
            sourceRows.forEach(row => {
                row.style.display = 'none';
            });
        }
    });
    
    // Пересчитываем rowspan для видимых строк
    recalculateRowspans();
    updateCounter();
}

// Пересчет rowspan для видимых строк
function recalculateRowspans() {
    const rows = document.querySelectorAll('#resultsTable tbody tr');
    
    // Группируем видимые строки по source_id
    const sourceGroups = {};
    rows.forEach(row => {
        if (row.style.display !== 'none') {
            const sourceId = row.dataset.sourceId;
            if (!sourceGroups[sourceId]) {
                sourceGroups[sourceId] = [];
            }
            sourceGroups[sourceId].push(row);
        }
    });
    
    // All rowspan cell classes
    const rowspanCellClasses = [
        '.source-id-cell', '.source-type-cell', '.source-ownership-cell', '.source-requests-count-cell',
        '.source-gso-cell', '.source-kubsat-cell', '.source-status-cell', '.source-count-cell', '.source-avg-coords-cell'
    ];
    
    // Обновляем rowspan для каждой группы
    Object.keys(sourceGroups).forEach(sourceId => {
        const visibleRows = sourceGroups[sourceId];
        const newRowspan = visibleRows.length;
        
        if (visibleRows.length > 0) {
            const firstRow = visibleRows[0];
            
            rowspanCellClasses.forEach(cls => {
                const cell = firstRow.querySelector(cls);
                if (cell) {
                    cell.setAttribute('rowspan', newRowspan);
                    // Обновляем отображаемое количество точек
                    if (cell.classList.contains('source-count-cell')) {
                        cell.textContent = newRowspan;
                    }
                }
            });
        }
    });
}

// Очистка поиска
function clearSearch() {
    document.getElementById('searchObjitemName').value = '';
    filterTableByName();
}

document.addEventListener('DOMContentLoaded', function() {
    updateCounter();
});
</script>
