<?php

class Emprunt {
    private $Id_emprunt;
    private $Id_ouvrage;
    private $Id_utilisateur;
    private $date_emprunt;
    private $date_retour;
    private $statut; // en_cours|rendu

    public function __construct($Id_emprunt, $Id_ouvrage, $Id_utilisateur, $date_emprunt, $date_retour, $statut) {
        $this->Id_emprunt = $Id_emprunt;
        $this->Id_ouvrage = $Id_ouvrage;
        $this->Id_utilisateur = $Id_utilisateur;
        $this->date_emprunt = $date_emprunt;
        $this->date_retour = $date_retour;
        $this->statut = $statut;
    }

    // =============================
    // Méthodes statiques existantes
    // =============================

    public static function getActiveByOuvrage($Id_ouvrage) {
        $db = Bdd::getInstance()->getConnection();
        $stmt = $db->prepare("SELECT * FROM emprunt WHERE Id_ouvrage = :id AND statut='en_cours' LIMIT 1");
        $stmt->execute([':id' => $Id_ouvrage]);
        if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            return new Emprunt(
                $row['Id_emprunt'],
                $row['Id_ouvrage'],
                $row['Id_utilisateur'],
                $row['date_emprunt'],
                $row['date_retour'],
                $row['statut']
            );
        }
        return null;
    }

    public static function create($Id_ouvrage, $Id_utilisateur) {
        // Refuse si déjà emprunt en cours
        if (self::getActiveByOuvrage($Id_ouvrage)) {
            return false;
        }
        $db = Bdd::getInstance()->getConnection();
        $stmt = $db->prepare("INSERT INTO emprunt (Id_ouvrage, Id_utilisateur, statut) VALUES (:o,:u,'en_cours')");
        return $stmt->execute([':o'=>$Id_ouvrage, ':u'=>$Id_utilisateur]);
    }

    public static function close($Id_emprunt) {
        $db = Bdd::getInstance()->getConnection();
        $stmt = $db->prepare("UPDATE emprunt SET statut='rendu', date_retour=NOW() WHERE Id_emprunt=:id AND statut='en_cours'");
        return $stmt->execute([':id'=>$Id_emprunt]);
    }

    // =============================
    // Getters
    // =============================

    public function getId_emprunt() {
        return $this->Id_emprunt;
    }

    public function getId_ouvrage() {
        return $this->Id_ouvrage;
    }

    public function getId_utilisateur() {
        return $this->Id_utilisateur;
    }

    public function getDate_emprunt() {
        return $this->date_emprunt;
    }

    public function getDate_retour() {
        return $this->date_retour;
    }

    public function getStatut() {
        return $this->statut;
    }

    // =============================
    // Setters
    // =============================

    public function setId_emprunt($Id_emprunt) {
        $this->Id_emprunt = $Id_emprunt;
    }

    public function setId_ouvrage($Id_ouvrage) {
        $this->Id_ouvrage = $Id_ouvrage;
    }

    public function setId_utilisateur($Id_utilisateur) {
        $this->Id_utilisateur = $Id_utilisateur;
    }

    public function setDate_emprunt($date_emprunt) {
        $this->date_emprunt = $date_emprunt;
    }

    public function setDate_retour($date_retour) {
        $this->date_retour = $date_retour;
    }

    public function setStatut($statut) {
        $this->statut = $statut;
    }

    public static function findById($Id_emprunt) {
        $db = Bdd::getInstance()->getConnection();
        $stmt = $db->prepare("SELECT * FROM emprunt WHERE Id_emprunt = :id LIMIT 1");
        $stmt->execute([':id'=>$Id_emprunt]);
        if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            return new Emprunt($row['Id_emprunt'], $row['Id_ouvrage'], $row['Id_utilisateur'], $row['date_emprunt'], $row['date_retour'], $row['statut']);
        }
        return null;
    }
}



