"""Modèles de l'application gestion_vehicule."""

from django.db import models
from authentification.models import Profile

class Vehicule(models.Model):
    """Modèle représentant un véhicule."""

    immatriculation = models.TextField(
        verbose_name="Immatriculation",
        max_length=15
    )
    image = models.ImageField(
        verbose_name="Image de la voiture", upload_to="vehicule_image"
    )
    disponible = models.BooleanField(
        verbose_name="Vehicule disponible ?",
        default=True)

    def __str__(self):
        """Retourne une représentation en chaîne de caractères du véhicule."""
        return f"{self.immatriculation}"

class DemandeVehicule(models.Model):
    """Modèle représentant une demande de véhicule."""

    vehicule = models.ForeignKey(Vehicule, on_delete=models.CASCADE, null=True)
    nom_passager = models.ForeignKey(
        Profile,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="passager_de_la_demande",
    )
    chauffeur = models.ForeignKey(
        Profile,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="chauffeur_affecter_course",
    )
    lieu_depart = models.TextField(verbose_name="Lieu de départ")
    lieu_arrive = models.TextField(verbose_name="Lieu d'arrivée")
    date_heure = models.DateTimeField(verbose_name="Date et heure de départ")
    validation = models.BooleanField(
        verbose_name="Validation par le logisticien", default=None, null=True
    )
    motif_refus = models.TextField(verbose_name="Motifs du refus", default="")

    def __str__(self):
        """Retourne une représentation en chaîne de caractères."""
        return (f"DemandeVehicule {self.pk} -"
               f"{self.lieu_depart} à {self.lieu_arrive}"
               f" le {self.date_heure}"
               )

class CarnetBord(models.Model):
    """Modèle représentant le carnet de bord d'un véhicule."""

    vehicule = models.ForeignKey(
        Vehicule, null=True, blank=True, on_delete=models.CASCADE
    )
    course = models.ForeignKey(
        DemandeVehicule, on_delete=models.CASCADE,
        default=None, null=True, blank=True
    )
    heure_effectif_depart = models.DateTimeField(
        verbose_name="Date et heure effectif de départ :",
        default=None,
        null=True,
        blank=True,
    )
    km_depart = models.PositiveIntegerField(
        verbose_name="Kilometrage de départ :", default=None, null=True,
        blank=True
    )
    heure_arrive = models.DateTimeField(
        verbose_name="Date et heure d'arrivee :", default=None, null=True,
        blank=True
    )
    km_arrive = models.PositiveIntegerField(
        verbose_name="Kilometrage d'arrivé :", default=0
    )
    course_termine = models.BooleanField(
        verbose_name="Course terminée :", default=False
    )

    def __str__(self):
        """Retourne une représentation en chaîne de caractères."""
        return f"CarnetBord {self.pk} - Vehicule: {self.vehicule}"

class CarnetCarburant(models.Model):
    """Modèle représentant le carnet de carburant d'un véhicule."""

    date = models.DateField(verbose_name="Date")
    nom_station = models.TextField(verbose_name="Nom de la station-service")
    type_carburant = models.TextField(
        verbose_name="Type du carburant",
        choices={
            "essence": "Essence",
            "gazoil": "Gazoil",
        },
    )
    litre = models.PositiveIntegerField(verbose_name="Litre")
    prix = models.PositiveIntegerField(verbose_name="Prix par litre (en GNF)")
    kilometrage = models.PositiveIntegerField(verbose_name="Kilometrage")
    observation = models.TextField(verbose_name="Observation")
    course = models.ForeignKey(
        DemandeVehicule,
        default=None,
        on_delete=models.CASCADE
    )

    def __str__(self):
        """Retourne une représentation en chaîne de caractères."""
        return (
            f"CarnetCarburant {self.pk} - Station: {self.nom_station} - "
            f"Date: {self.date}"
        )
