"""
Модель спутника.
"""
from django.db import models


class Satellite(models.Model):
    """
    Модель спутника.

    Представляет спутник связи с его основными характеристиками.
    """
    PLACES = [
        ("kr", "КР"),
        ("dv", "ДВ")
    ]
    
    # Основные поля
    name = models.CharField(
        max_length=100,
        unique=True,
        verbose_name="Имя спутника",
        db_index=True,
        help_text="Название спутника",
    )
    alternative_name = models.CharField(
        max_length=100,
        blank=True,
        null=True,
        verbose_name="Альтернативное имя",
        db_index=True,
        help_text="Альтернативное название спутника",
    )
    location_place = models.CharField(
        max_length=30,
        choices=PLACES,
        null=True,
        default="kr",
        verbose_name="Комплекс",
        help_text="К какому комплексу принадлежит спутник",
    )
    norad = models.IntegerField(
        blank=True,
        null=True,
        verbose_name="NORAD ID",
        help_text="Идентификатор NORAD для отслеживания спутника",
    )
    international_code = models.CharField(
        max_length=50,
        blank=True,
        null=True,
        verbose_name="Международный код",
        help_text="Международный идентификатор спутника (например, 2011-074A)",
    )
    band = models.ManyToManyField(
        'mainapp.Band',
        related_name="bands",
        verbose_name="Диапазоны",
        blank=True,
        help_text="Диапазоны работы спутника",
    )
    undersat_point = models.FloatField(
        blank=True,
        null=True,
        verbose_name="Подспутниковая точка, градусы",
        help_text="Подспутниковая точка в градусах. Восточное полушарие с +, западное с -",
    )
    url = models.URLField(
        blank=True,
        null=True,
        verbose_name="Ссылка на источник",
        help_text="Ссылка на сайт, где можно проверить информацию",
    )
    comment = models.TextField(
        blank=True,
        null=True,
        verbose_name="Комментарий",
        help_text="Любой возможный комменатрий",
    )
    launch_date = models.DateField(
        blank=True,
        null=True,
        verbose_name="Дата запуска",
        help_text="Дата запуска спутника",
    )

    created_at = models.DateTimeField(
        auto_now_add=True,
        verbose_name="Дата создания",
        help_text="Дата и время создания записи",
    )
    created_by = models.ForeignKey(
        'mainapp.CustomUser',
        on_delete=models.SET_NULL,
        related_name="satellite_created",
        null=True,
        blank=True,
        verbose_name="Создан пользователем",
        help_text="Пользователь, создавший запись",
    )
    updated_at = models.DateTimeField(
        auto_now=True,
        verbose_name="Дата последнего изменения",
        help_text="Дата и время последнего изменения",
    )
    updated_by = models.ForeignKey(
        'mainapp.CustomUser',
        on_delete=models.SET_NULL,
        related_name="satellite_updated",
        null=True,
        blank=True,
        verbose_name="Изменен пользователем",
        help_text="Пользователь, последним изменивший запись",
    )

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Спутник"
        verbose_name_plural = "Спутники"
        ordering = ["name"]
