from django.db import models


class Speaker(models.Model):
    """
    This models contains general data about one MdB. Data will be imported from
    the Stammdatenbank.xml via the custom django-admin command import_speakers.py.
    """
    id = models.IntegerField(verbose_name="MdB ID", primary_key=True)
    last_name = models.CharField(verbose_name="Nachname", max_length=50)
    first_name = models.CharField(verbose_name="Vorname", max_length=50)
    nobility = models.CharField(verbose_name="Adelstitel", max_length=50,
                                null=True)
    name_prefix = models.CharField(verbose_name="Namenspräfix", max_length=50,
                                   null=True)
    title = models.CharField(verbose_name="Akademischer Titel", null=True,
                             blank=True, max_length=50)
    birthday = models.IntegerField(verbose_name="Geburtstag", )
    birthplace = models.CharField(verbose_name="Geburtsort", null=True,
                                  blank=True, max_length=50)
    country_of_birth = models.CharField(verbose_name="Geburtsland", null=True,
                                        blank=True, max_length=50)
    day_of_death = models.IntegerField(verbose_name="Todesjahr", null=True,
                                       blank=True)

    occupation = models.TextField(verbose_name="Beruf")
    short_vita = models.TextField(verbose_name="Kurzbiographie", default=None,
                                  null=True, blank=True)
    party = models.CharField(verbose_name="Partei", null=True, blank=True,
                             max_length=50)

    def __str__(self):
        return str(self.id) + " " + self.first_name + " " + self.last_name


class LegislativeInfo(models.Model):
    """
    This model contains data about the periods an MdB was an active part of the
    Deutsche Bundestag. Needs a foreign key which is the coresponding Speaker
    entry.
    """
    foreign_speaker = models.ForeignKey("Speaker", on_delete=models.CASCADE)
    legislative_period = models.IntegerField(verbose_name="Wahlperiode",
                                             null=True)
    legislative_period_start_date = models.DateField(verbose_name="MdB von",
                                                     null=True)
    legislative_period_end_date = models.DateField(verbose_name="MdB bis",
                                                   null=True)
    mandate_type = models.CharField(verbose_name="Mandatsart", null=True,
                                    blank=True, max_length=50)

    def __str__(self):
        return str(self.foreign_speaker) + " " + str(self.legislative_period)


class LegislativeInstitution(models.Model):
    """
    This model contains data about the instituions an MdB was part of during a
    specific legislative period. Needs a foreign key which is the coresponding
    Speaker entry.
    """
    foreign_speaker = models.ForeignKey("Speaker",
                                        on_delete=models.CASCADE)
    current_period = models.IntegerField(verbose_name="Wahlperiode",
                                         null=True)
    institution = models.CharField(verbose_name="Institut", null=True,
                                   blank=True, max_length=255)
    institution_start_date = models.DateField(verbose_name="Mitglied von",
                                              null=True)
    institution_end_date = models.DateField(verbose_name="Mitglied bis",
                                            null=True)

    def __str__(self):
        return str(self.foreign_legislative_info) + " " + str(self.institution)