from django.db import models

from contentmonster.classes.directory import Directory
from contentmonster.classes.vessel import Vessel

from ..validators import validate_directory

from getpass import getuser

import uuid


class ReplicationSource(models.Model):
    """Represents Directory objects in ContentMonster"""

    name = models.CharField(max_length=128)
    location = models.CharField(max_length=2048, validators=[validate_directory])

    def to_directory(self) -> Directory:
        return Directory(name, location)


class ReplicationTarget(models.Model):
    """Represents Vessel objects in ContentMonster"""

    name = models.CharField(max_length=128)
    address = models.CharField(max_length=256)
    username = models.CharField(max_length=64, default=getuser(), null=True, blank=True)
    monitor = models.BooleanField(default=True)

    def to_vessel(self, dbclass=None) -> Vessel:
        return Vessel(name, address, username, dbclass=ContentMonsterDatabase)


class ReplicationFile(models.Model):
    """Represents File objects in ContentMonster"""

    uuid = models.UUIDField(primary_key=True, default=uuid.uuid4)
    directory = models.ForeignKey(ReplicationSource, models.CASCADE)
    name = models.CharField(max_length=128)
    checksum = models.CharField(max_length=64)


class ReplicationFileLog(models.Model):
    """Represents File completion in ContentMonster"""

    file = models.ForeignKey(ReplicationFile, models.CASCADE)
    vessel = models.ForeignKey(ReplicationTarget, models.CASCADE)
    timestamp = models.DateTimeField(auto_now_add=True)