from django.conf import settings
from django.db import models


class ReadingSettings(models.Model):
    """Per-user reading preferences for the e-book reader view."""

    THEME_CHOICES = [
        ("sepia", "Sepia"),
        ("dark", "Dark"),
        ("light", "Light"),
        ("paper", "Paper"),
    ]

    FONT_CHOICES = [
        ("sans-serif", "Sans-serif"),
        ("serif", "Serif"),
        ("monospace", "Monospace"),
    ]

    ORIENTATION_CHOICES = [
        ("auto", "Auto"),
        ("portrait", "Portrait"),
        ("landscape", "Landscape"),
    ]

    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name="reading_settings",
        primary_key=True,
    )
    font_family = models.CharField(max_length=32, choices=FONT_CHOICES, default="serif")
    font_size = models.PositiveSmallIntegerField(default=18)
    line_height = models.FloatField(default=1.6)
    margin_width = models.PositiveSmallIntegerField(default=16)
    background_color = models.CharField(max_length=7, default="#f5f0eb")
    text_color = models.CharField(max_length=7, default="#1a1a1a")
    brightness = models.PositiveSmallIntegerField(default=100)
    orientation_lock = models.CharField(
        max_length=16, choices=ORIENTATION_CHOICES, default="auto"
    )
    theme = models.CharField(max_length=32, choices=THEME_CHOICES, default="sepia")
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = "reader_reading_settings"
        verbose_name = "Reading Settings"
        verbose_name_plural = "Reading Settings"

    def __str__(self) -> str:
        return f"{self.user} — {self.theme} ({self.font_size}px)"
