"""
Справочные модели (справочники).
"""
from django.db import models


class ObjectInfo(models.Model):
    name = models.CharField(
        max_length=255,
        unique=True,
        verbose_name="Тип объекта",
        help_text="Информация о типе объекта",
    )

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Тип объекта"
        verbose_name_plural = "Типы объектов"
        ordering = ["name"]


class ObjectOwnership(models.Model):
    """
    Модель принадлежности объекта.
    """
    name = models.CharField(
        max_length=255,
        unique=True,
        verbose_name="Принадлежность",
        help_text="Принадлежность объекта",
    )

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Принадлежность объекта"
        verbose_name_plural = "Принадлежности объектов"
        ordering = ["name"]


class Polarization(models.Model):
    """
    Модель поляризации сигнала.

    Определяет тип поляризации спутникового сигнала (H, V, L, R и т.д.).
    """

    name = models.CharField(
        max_length=20,
        unique=True,
        verbose_name="Поляризация",
        db_index=True,
        help_text="Тип поляризации (H - горизонтальная, V - вертикальная, L - левая круговая, R - правая круговая)",
    )

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Поляризация"
        verbose_name_plural = "Поляризация"
        ordering = ["name"]


class Modulation(models.Model):
    """
    Модель типа модуляции сигнала.

    Определяет схему модуляции (QPSK, 8PSK, 16APSK и т.д.).
    """

    name = models.CharField(
        max_length=20,
        unique=True,
        verbose_name="Модуляция",
        db_index=True,
        help_text="Тип модуляции сигнала (QPSK, 8PSK, 16APSK и т.д.)",
    )

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Модуляция"
        verbose_name_plural = "Модуляции"
        ordering = ["name"]


class Standard(models.Model):
    """
    Модель стандарта передачи данных.

    Определяет стандарт передачи (DVB-S, DVB-S2, DVB-S2X и т.д.).
    """

    name = models.CharField(
        max_length=80,
        unique=True,
        verbose_name="Стандарт",
        db_index=True,
        help_text="Стандарт передачи данных (DVB-S, DVB-S2, DVB-S2X и т.д.)",
    )

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Стандарт"
        verbose_name_plural = "Стандарты"
        ordering = ["name"]


class Band(models.Model):
    name = models.CharField(
        max_length=50,
        unique=True,
        verbose_name="Название",
        help_text="Название диапазона",
    )
    border_start = models.FloatField(
        blank=True, null=True, verbose_name="Нижняя граница диапазона, МГц"
    )
    border_end = models.FloatField(
        blank=True, null=True, verbose_name="Верхняя граница диапазона, МГц"
    )

    def __str__(self):
        return f"{self.name}({int(self.border_start)}-{int(self.border_end)})МГц"

    class Meta:
        verbose_name = "Диапазон"
        verbose_name_plural = "Диапазоны"
        ordering = ["name"]
