from django.db import models


class Legislatura(models.Model):
    data_inicio = models.DateField()   # dat_inicio
    data_fim = models.DateField()      # dat_fim
    data_eleicao = models.DateField()  # dat_eleicao


class SessaoLegislativa(models.Model):
    legislatura = models.ForeignKey(Legislatura)                     # num_legislatura
    numero = models.IntegerField()                                   # num_sessao_leg
    tipo = models.CharField(max_length=1)                            # tip_sessao_leg
    data_inicio = models.DateField()                                 # dat_inicio
    data_fim = models.DateField()                                    # dat_fim
    data_inicio_intervalo = models.DateField(blank=True, null=True)  # dat_inicio_intervalo
    data_fim_intervalo = models.DateField(blank=True, null=True)     # dat_fim_intervalo


class Coligacao(models.Model):
    legislatura = models.ForeignKey(Legislatura)                         # num_legislatura
    nome_coligacao = models.CharField(max_length=50)                     # nom_coligacao
    numero_votos_coligacao = models.IntegerField(blank=True, null=True)  # num_votos_coligacao


class Partido(models.Model):
    sigla_partido = models.CharField(max_length=9)           # sgl_partido
    nome_partido = models.CharField(max_length=50)           # nom_partido
    data_criacao = models.DateField(blank=True, null=True)   # dat_criacao
    data_extincao = models.DateField(blank=True, null=True)  # dat_extincao


class ComposicaoColigacao(models.Model):
    partido = models.ForeignKey(Partido)      # cod_partido
    coligacao = models.ForeignKey(Coligacao)  # cod_coligacao


class Localidade(models.Model):
    nome_localidade = models.CharField(max_length=50, blank=True, null=True)       # nom_localidade
    nome_localidade_pesq = models.CharField(max_length=50, blank=True, null=True)  # nom_localidade_pesq
    tipo_localidade = models.CharField(max_length=1, blank=True, null=True)        # tip_localidade
    sigla_uf = models.CharField(max_length=2, blank=True, null=True)               # sgl_uf
    sigla_regiao = models.CharField(max_length=2, blank=True, null=True)           # sgl_regiao


class NivelInstrucao(models.Model):
    nivel_instrucao = models.CharField(max_length=50)  # des_nivel_instrucao


class SituacaoMilitar(models.Model):
    descricao_tipo_situacao = models.CharField(max_length=50)  # des_tipo_situacao


class Parlamentar(models.Model):
    nivel_instrucao = models.ForeignKey(NivelInstrucao, blank=True, null=True)         # cod_nivel_instrucao
    situacao_militar = models.ForeignKey(SituacaoMilitar, blank=True, null=True)       # tip_situacao_militar
    nome_completo = models.CharField(max_length=50)                                    # nom_completo
    nome_parlamentar = models.CharField(max_length=50, blank=True, null=True)          # nom_parlamentar
    sexo = models.CharField(max_length=1)                                              # sex_parlamentar
    data_nascimento = models.DateField(blank=True, null=True)                          # dat_nascimento
    numero_cpf = models.CharField(max_length=14, blank=True, null=True)                # num_cpf
    numero_rg = models.CharField(max_length=15, blank=True, null=True)                 # num_rg
    numero_tit_eleitor = models.CharField(max_length=15, blank=True, null=True)        # num_tit_eleitor
    cod_casa = models.IntegerField()                                                   # cod_casa
    numero_gab_parlamentar = models.CharField(max_length=10, blank=True, null=True)    # num_gab_parlamentar
    numero_tel_parlamentar = models.CharField(max_length=50, blank=True, null=True)    # num_tel_parlamentar
    numero_fax_parlamentar = models.CharField(max_length=50, blank=True, null=True)    # num_fax_parlamentar
    endereco_residencial = models.CharField(max_length=100, blank=True, null=True)     # end_residencial
    localidade_resid = models.ForeignKey(Localidade, blank=True, null=True)            # cod_localidade_resid
    numero_cep_resid = models.CharField(max_length=9, blank=True, null=True)           # num_cep_resid
    numero_tel_resid = models.CharField(max_length=50, blank=True, null=True)          # num_tel_resid
    numero_fax_resid = models.CharField(max_length=50, blank=True, null=True)          # num_fax_resid
    endereco_web = models.CharField(max_length=100, blank=True, null=True)             # end_web
    nome_profissao = models.CharField(max_length=50, blank=True, null=True)            # nom_profissao
    endereco_email = models.CharField(max_length=100, blank=True, null=True)           # end_email
    descricao_local_atuacao = models.CharField(max_length=100, blank=True, null=True)  # des_local_atuacao
    ativo = models.BooleanField()                                                      # ind_ativo
    txt_biografia = models.TextField(blank=True, null=True)                            # txt_biografia
    unid_deliberativa = models.BooleanField()                                          # ind_unid_deliberativa


class TipoDependente(models.Model):
    descricao_tipo_dependente = models.CharField(max_length=50)  # des_tipo_dependente


class Dependente(models.Model):
    tipo_dependente = models.ForeignKey(TipoDependente)                          # tip_dependente
    parlamentar = models.ForeignKey(Parlamentar)                                 # cod_parlamentar
    nome_dependente = models.CharField(max_length=50)                            # nom_dependente
    sexo = models.CharField(max_length=1)                                        # sex_dependente
    data_nascimento = models.DateField(blank=True, null=True)                    # dat_nascimento
    numero_cpf = models.CharField(max_length=14, blank=True, null=True)          # num_cpf
    numero_rg = models.CharField(max_length=15, blank=True, null=True)           # num_rg
    numero_tit_eleitor = models.CharField(max_length=15, blank=True, null=True)  # num_tit_eleitor


class Filiacao(models.Model):
    data_filiacao = models.DateField()                          # dat_filiacao
    parlamentar = models.ForeignKey(Parlamentar)                # cod_parlamentar
    partido = models.ForeignKey(Partido)                        # cod_partido
    data_desfiliacao = models.DateField(blank=True, null=True)  # dat_desfiliacao


class TipoAfastamento(models.Model):
    descricao_afastamento = models.CharField(max_length=50)                         # des_afastamento
    afastamento = models.BooleanField()                                             # ind_afastamento
    fim_mandato = models.BooleanField()                                             # ind_fim_mandato
    descricao_dispositivo = models.CharField(max_length=50, blank=True, null=True)  # des_dispositivo


class Mandato(models.Model):
    parlamentar = models.ForeignKey(Parlamentar)                                  # cod_parlamentar
    tipo_afastamento = models.ForeignKey(TipoAfastamento, blank=True, null=True)  # tip_afastamento
    legislatura = models.ForeignKey(Legislatura)                                  # num_legislatura
    coligacao = models.ForeignKey(Coligacao, blank=True, null=True)               # cod_coligacao
    tipo_causa_fim_mandato = models.IntegerField(blank=True, null=True)           # tip_causa_fim_mandato
    data_fim_mandato = models.DateField(blank=True, null=True)                    # dat_fim_mandato
    numero_votos_recebidos = models.IntegerField(blank=True, null=True)           # num_votos_recebidos
    data_expedicao_diploma = models.DateField(blank=True, null=True)              # dat_expedicao_diploma
    txt_observacao = models.TextField(blank=True, null=True)                      # txt_observacao


class CargoMesa(models.Model):
    nome = models.CharField(max_length=50)  # des_cargo
    unico = models.BooleanField()           # ind_unico


class ComposicaoMesa(models.Model):
    parlamentar = models.ForeignKey(Parlamentar)               # cod_parlamentar
    sessao_legislativa = models.ForeignKey(SessaoLegislativa)  # cod_sessao_leg
    cargo = models.ForeignKey(CargoMesa)                       # cod_cargo