
from django.db import models
from mutagen import File as MutagenFile


class Menu(models.Model):
    title = models.CharField(max_length=100, default='', blank=True)
    icon = models.CharField(max_length=100, blank=True, null=True)
    link = models.CharField(default='#')
    data = models.CharField(max_length=100, default='')
    ordering = models.PositiveIntegerField(default=0)
    is_active = models.BooleanField(default=True)

    class Meta:
        verbose_name = 'Menu'
        verbose_name_plural = 'Menu'
        ordering = ['ordering']

    def __str__(self):
        return self.title


class Hero(models.Model):
    title = models.CharField(max_length=255, blank=True, verbose_name='Section title')
    subtitle = models.CharField(max_length=255, blank=True)
    description = models.TextField(blank=True)
    background_image = models.ImageField(upload_to='hero/')
    background_image_mobile = models.ImageField(
        upload_to='hero/',
        blank=True,
        null=True
    )
    video_url = models.URLField(blank=True)
    is_active = models.BooleanField(default=True)

    class Meta:
        verbose_name = 'Hero'
        verbose_name_plural = 'Hero'

    def __str__(self):
        return self.title


class About(models.Model):
    title = models.CharField(max_length=255, blank=True)
    description = models.TextField()
    download_url = models.FileField(blank=True, verbose_name='Upload')

    class Meta:
        verbose_name = 'About'
        verbose_name_plural = 'About'

    def __str__(self):
        return self.title


class AboutSlide(models.Model):
    section = models.ForeignKey(
        About,
        related_name='slides',
        on_delete=models.CASCADE
    )
    years = models.PositiveIntegerField(blank=True, null=True, verbose_name='Years')
    years_label = models.TextField(max_length=255, blank=True, verbose_name='Years text')
    title = models.CharField(max_length=255)
    description = models.TextField(blank=True)

    ordering = models.PositiveIntegerField(default=0)

    class Meta:
        ordering = ['ordering']


class AboutSkill(models.Model):
    about = models.ForeignKey(
        About,
        related_name='skills',
        on_delete=models.CASCADE
    )
    title = models.CharField(max_length=100, default='')
    title_akcent = models.CharField(max_length=100, default='')
    title_counter = models.CharField(max_length=255, default='')
    description = models.TextField(blank=True)
    number = models.CharField(max_length=20, default='100')  # "900+"
    text = models.CharField(max_length=200, blank=True)
    percent = models.PositiveIntegerField(default=0)

    ordering = models.PositiveIntegerField(default=0)

    class Meta:
        verbose_name = 'About skill'
        verbose_name_plural = 'About skills'
        ordering = ['ordering']

    def __str__(self):
        return f'{self.title} ({self.percent}%)'


class Movie(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField()
    preview_image = models.ImageField(upload_to='movies/', default='movies/default.jpg')
    movie_file = models.FileField(upload_to='movies/', blank=True, verbose_name='File upload')
    movie_url = models.URLField(blank=True, verbose_name='URL')
    ordering = models.PositiveIntegerField(default=0)
    is_active = models.BooleanField(default=True)

    class Meta:
        verbose_name = 'Movie'
        verbose_name_plural = 'Movies'
        ordering = ['ordering']

    def __str__(self):
        return self.title


class MovieBackground(models.Model):
    image = models.ImageField(upload_to='movies/backgrounds/')
    ordering = models.PositiveIntegerField(default=0)
    is_active = models.BooleanField(default=False)

    class Meta:
        verbose_name = 'Movie background'
        verbose_name_plural = 'Movie backgrounds'
        ordering = ['ordering']

    def __str__(self):
        return f'Background {self.ordering}'


def get_audio_duration(file_path):
    audio = MutagenFile(file_path)
    if audio and audio.info:
        return int(audio.info.length)
    return None


class AudioTrack(models.Model):
    title = models.CharField(max_length=255)
    subtitle = models.CharField(max_length=255, blank=True)
    audio_file = models.FileField(upload_to='audio/')
    duration = models.PositiveIntegerField(
        help_text='in seconds',
        editable=False,
        blank=True,
        null=True,
    )
    cover_image = models.ImageField(upload_to='audio/', blank=True)
    ordering = models.PositiveIntegerField(default=0)
    is_active = models.BooleanField(default=True)

    class Meta:
        verbose_name = 'Audio track'
        verbose_name_plural = 'Audio tracks'
        ordering = ['ordering']

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        if self.audio_file and not self.duration:
            duration = get_audio_duration(self.audio_file.path)
            if duration:
                self.duration = duration
                super().save(update_fields=["duration"])



class Testimonial(models.Model):
    title = models.CharField(max_length=200, default='Testimonial')
    text = models.TextField(max_length=500, blank=True)
    author_name = models.CharField(max_length=100)
    author_company = models.CharField(max_length=100, blank=True)
    ordering = models.PositiveIntegerField(default=0)
    is_active = models.BooleanField(default=True)

    class Meta:
        verbose_name = 'Testimonial'
        verbose_name_plural = 'Testimonials'
        ordering = ['ordering']

    def __str__(self):
        return self.author_name


class Partner(models.Model):
    name = models.CharField(max_length=100)
    logo = models.ImageField(upload_to='partners/')
    url = models.URLField(blank=True)
    ordering = models.PositiveIntegerField(default=0)
    is_active = models.BooleanField(default=True)

    class Meta:
        verbose_name = 'Partner'
        verbose_name_plural = 'Partners'
        ordering = ['ordering']

    def __str__(self):
        return self.name


class TeamMember(models.Model):
    name = models.CharField(max_length=100)
    position = models.TextField(max_length=250)
    since = models.CharField(max_length=100, default='')
    photo = models.ImageField(upload_to='team/')
    ordering = models.PositiveIntegerField(default=0)
    is_active = models.BooleanField(default=True)

    class Meta:
        verbose_name = 'Team member'
        verbose_name_plural = 'Team'
        ordering = ['ordering']

    def __str__(self):
        return self.name


class ContactRequest(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    telegram_username = models.CharField(max_length=100, blank=True)
    message = models.TextField()

    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = 'Contact'
        verbose_name_plural = 'Contact'
        ordering = ['-created_at']

    def __str__(self):
        return f'{self.name} ({self.email})'


# Translation site
class SiteText(models.Model):
    # Title sections
    about_title = models.CharField(max_length=100, default='About')
    movie_title = models.CharField(max_length=100, default='Movie')
    sound_title = models.CharField(max_length=100, default='Sound')
    partners_title = models.CharField(max_length=100, default='Partners')
    team_title = models.CharField(max_length=100, default='Team')
    contact_title = models.CharField(max_length=100, default='Contact')


    # Button text
    button_about = models.CharField(max_length=100, default='Dounload Resume')
    button_movie = models.CharField(max_length=100, default='Watch more')
    button_sound = models.CharField(max_length=100, default='Listen more')
    button_contact = models.CharField(max_length=100, default='Contact')


    # Site text
    sound_random = models.CharField(max_length=100, default='Random')
    testimonial_text = models.TextField(max_length=500, blank=True)
    team_text = models.TextField(max_length=500, blank=True)
    contact_textcontact_text = models.TextField(max_length=500, blank=True)
    contact_address = models.TextField(max_length=500, blank=True)
    contact_form_text = models.TextField(max_length=500, blank=True)
    footer_text = models.CharField(max_length=100, default='© Idalgo Film. 2026')

    class Meta:
        verbose_name = 'Site texts'
        verbose_name_plural = 'Site texts'

    def __str__(self):
        return "Site texts"
