from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _
from django.contrib.gis.db import models as geomodels

TYPE_STAGE_CHOICES = (
    ('stage', _(u"Stage")),
)

TYPE_LIEU_CHOICES = (
    ('universite', _(u"Université")),
    ('entreprise', _(u"Entreprise")),
    ('centrerecherche', _(u"Centre de recherche")),
    ('administration', _(u"Administration")),
    ('autre', _(u"Autre")),
)

class Normalien(models.Model):
    user = models.OneToOneField(User, related_name = "profil")
    permanent_mail = models.CharField("Adresse e-mail permanente", max_length = 200, blank = True)

    class Meta:
        verbose_name = "Profil élève"
        verbose_name_plural = "Profils élèves"

    def __unicode__(self):
        return unicode(self.user.username)


class Stage(models.Model):
    user = models.ForeignKey(Normalien, related_name = "stages")
    published = models.BooleanField(_("Visible publiquement"), default = False)
    type_stage = models.CharField (_(u"Type"),
                             default = "stage",
                             choices = TYPE_STAGE_CHOICES,
                             max_length = choices_length (TYPE_STAGE_CHOICES))
    start_date = models.DateField(_(u"Date de début"), null = True)
    end_date = models.DateField(_(u"Date de fin"), null = True)
    sujet = models.CharField(_(u"Sujet"), max_length = 500)
    encadrants = models.CharField(_(u"Encadrants"), max_length = 500, blank = True)
    lieux = models.ManyToManyField(Lieu, related_name = "stages", through = "LieuStage")
    
    # Avis
    avis_encadrants = models.TextField(_(u"Avis sur les encadrants", blank = True)
    avis_equipe = models.TextField(_(u"Avis sur l'équipe", blank = True)
    avis_stage = models.TextField(_(u"Intérêt du stage", blank = True)
    avis_admin = models.TextField(_(u"Visa et administratif"), blank = True)
    
    def __unicode__(self):
        return u"%s : %s" % (self.user.profil.username, self.sujet)


class StageMatiere(models.Model):
    name = models.CharField(_(u"Matière"), max_length = 30)
    users = models.ManyToManyField(stages, related_name = "matieres")

    class Meta:
        verbose_name = "Matière des stages"
        verbose_name_plural = "Matières des stages"

    def __unicode__(self):
        return self.name
        
class Lieu(models.Model):
    name = models.CharField(_(u"Nom de l'institution d'accueil"), max_length = 250)
    ville = models.CharField(_(u"Ville, Pays"), max_length = 200)
    coord = geomodels.PointField(_(u"Coordonnées"), geography = True)
    objects = geomodels.GeoManager() # Requis par GeoDjango
    type_lieu = models.CharField( _(u"Type de structure d'accueil"),
                                  default = "universite",
                                  choices = TYPE_LIEU_CHOICES,
                                  max_length = choices_length (TYPE_LIEU_CHOICES))

    def __unicode__(self):
        return u"%s (%s)" % (self.name, self.ville)

class LieuStage(models.Model):
    stage = models.ForeignKey(Stage)
    lieu = models.ForeignKey(Lieu)
    
    # Avis
    avis_global = models.TextField(_(u"Ressenti global"), blank = True)
    avis_lieudevie = models.TextField(_(u"Mon lieu de vie"), blank = True)
    avis_lieustage = models.TextField(_(u"Le lieu du stage"), blank = True)
    avis_pratique = models.TextField(_(u"S'installer / Conseils pratiques"), blank = True)
    avis_visite = models.TextField(_(u"Que voir / que faire"), blank = True)
    avis_anecdotes = models.TextField(_(u"Anecdotes"), blank = True)