# Django imports
from django.contrib import admin

# Third-party imports
from import_export.admin import ImportExportActionModelAdmin
from more_admin_filters import MultiSelectRelatedDropdownFilter
from rangefilter.filters import NumericRangeFilterBuilder

# Local imports
from .models import Transponders


# ============================================================================
# Base Admin Classes
# ============================================================================

class BaseAdmin(admin.ModelAdmin):
    """
    Базовый класс для всех admin моделей mapsapp.
    
    Предоставляет общую функциональность:
    - Кнопки сохранения сверху и снизу
    - Настройка количества элементов на странице
    """
    save_on_top = True
    list_per_page = 50


# ============================================================================
# Admin Classes
# ============================================================================

@admin.register(Transponders)
class TranspondersAdmin(ImportExportActionModelAdmin, BaseAdmin):
    """
    Админ-панель для модели Transponders.
    
    Оптимизирована для работы с транспондерами:
    - Использует select_related для оптимизации запросов
    - Предоставляет фильтры по спутникам, поляризации и зоне
    - Поддерживает импорт/экспорт данных
    """
    list_display = (
        "sat_id",
        "name",
        "zone_name",
        "downlink",
        "uplink",
        "frequency_range",
        "transfer",
        "polarization",
    )
    list_display_links = ("name",)
    list_select_related = ("polarization", "sat_id")
    
    list_filter = (
        ("polarization", MultiSelectRelatedDropdownFilter),
        ("sat_id", MultiSelectRelatedDropdownFilter),
        ("downlink", NumericRangeFilterBuilder()),
        ("uplink", NumericRangeFilterBuilder()),
        ("frequency_range", NumericRangeFilterBuilder()),
        "zone_name",
    )
    
    search_fields = ("name", "sat_id__name", "zone_name")
    ordering = ("name",)
    autocomplete_fields = ("sat_id", "polarization") 
