from django.db import models
from ...records import RecordManager

class Celestial(models.Model):
    CELESTIAL_TYPES = ((0, 'Unknown'),
                       (1, 'Star'),
                       (2, 'Planet'),
                       (3, 'Planetoid'),
                       (4, 'Asteroid'),
                       (5, 'Station'))
    orbits = models.ForeignKey('self', blank=True, null=True, related_name='orbitals', on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    celestial_type = models.IntegerField(choices=CELESTIAL_TYPES, default=int)
    weight = models.FloatField(default=float)
    size = models.FloatField(default=float)
    
    objects = RecordManager()
    
    @property
    def is_moon(self):
        return 5 > self.celestial_type > 1 and self.orbits and 5 > self.orbits.celestial_type > 1

class Spaceport(models.Model):
    name = models.CharField(max_length=100)
    celestial = models.ForeignKey(Celestial, related_name='spaceports', on_delete=models.CASCADE)
    
    objects = RecordManager()

class Person(models.Model):
    origin = models.ForeignKey(Celestial, related_name='children', blank=True, null=True, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    age = models.IntegerField(blank=True, null=True)
    
    objects = RecordManager()

class Visitor(models.Model):
    person = models.ForeignKey(Person, related_name='as_visitor', on_delete=models.CASCADE)
    spaceport = models.ForeignKey(Spaceport, related_name='visitors', on_delete=models.CASCADE)
    luggage_weight = models.FloatField(blank=True, null=True, default=float)
    
    objects = RecordManager()

class Citizen(models.Model):
    planet = models.ForeignKey(Celestial, related_name='citizens', on_delete=models.CASCADE)
    person = models.ForeignKey(Person, related_name='citizenships', on_delete=models.CASCADE)
    clearance_level = models.IntegerField(blank=True, null=True)

    objects = RecordManager()