from django.db import models


class Playlist(models.Model):
    created_at = models.DateTimeField(blank=True, null=True, db_column="utime")
    updated_at = models.DateTimeField(blank=True, null=True, db_column="mtime")

    name = models.CharField(max_length=255)
    description = models.CharField(max_length=512, blank=True, null=True)
    length = models.DurationField(blank=True, null=True)

    owner = models.ForeignKey(
        "core.User",
        on_delete=models.DO_NOTHING,
        blank=True,
        null=True,
        db_column="creator_id",
    )

    def get_owner(self):
        return self.owner

    class Meta:
        managed = False
        db_table = "cc_playlist"


class PlaylistContent(models.Model):
    playlist = models.ForeignKey(
        "schedule.Playlist",
        on_delete=models.DO_NOTHING,
        blank=True,
        null=True,
    )

    class Kind(models.IntegerChoices):
        FILE = 0, "File"
        STREAM = 1, "Stream"
        BLOCK = 2, "Block"

    kind = models.SmallIntegerField(
        choices=Kind.choices,
        db_column="type",
    )

    file = models.ForeignKey(
        "storage.File",
        on_delete=models.DO_NOTHING,
        blank=True,
        null=True,
    )
    stream = models.ForeignKey(
        "schedule.Webstream",
        on_delete=models.DO_NOTHING,
        blank=True,
        null=True,
    )
    block = models.ForeignKey(
        "schedule.SmartBlock",
        on_delete=models.DO_NOTHING,
        blank=True,
        null=True,
    )

    position = models.IntegerField(blank=True, null=True)
    offset = models.FloatField(db_column="trackoffset")
    length = models.DurationField(blank=True, null=True, db_column="cliplength")
    cue_in = models.DurationField(blank=True, null=True, db_column="cuein")
    cue_out = models.DurationField(blank=True, null=True, db_column="cueout")
    fade_in = models.TimeField(blank=True, null=True, db_column="fadein")
    fade_out = models.TimeField(blank=True, null=True, db_column="fadeout")

    def get_owner(self):
        return self.playlist.get_owner()

    class Meta:
        managed = False
        db_table = "cc_playlistcontents"