<?php

class Utilisateur {

    private $Id_utilisateur;
    private $nom;
    private $prenom;
    private $num_tel;
    private $ddn;
    private $email;
    private $pass;
    private $actif;
    private $honeur;
    private $optinmail;
    private $Id_rolle;
    private $mailparrent;
    private $numparrent;

    

    public function __construct($Id_utilisateur, $nom, $prenom, $num_tel, $ddn, $email, $pass, $actif, $honeur, $optinmail, $Id_rolle, $mailparrent,$numparrent) {
        $this->Id_utilisateur = $Id_utilisateur;
        $this->nom = $nom;
        $this->prenom = $prenom;
        $this->num_tel = $num_tel;
        $this->ddn = $ddn;
        $this->email = $email;
        $this->pass = $pass;
        $this->actif = $actif;
        $this->honeur = $honeur;
        $this->optinmail = $optinmail;
        $this->Id_rolle = $Id_rolle;
        $this->mailparrent = $mailparrent;
        $this->numparrent = $numparrent;
    }

    public static function login($email, $password) {
        $db = Bdd::getInstance();
        $pdo = $db->getConnection();
        try {
            // Récupérer l'utilisateur par email
            $stmt = $pdo->prepare("SELECT * FROM Utilisateur WHERE email = :email");
            $stmt->bindParam(':email', $email);
            $stmt->execute();

            if ($stmt->rowCount() == 1) {
                $row = $stmt->fetch(PDO::FETCH_ASSOC);

                // Vérifie le mot de passe haché
                if (password_verify($password, $row['pass'])) {
                    return new Utilisateur(
                        $row['Id_utilisateur'],
                        $row['nom'],
                        $row['prenom'],
                        $row['num_tel'],
                        $row['ddn'],
                        $row['email'],
                        $row['pass'],
                        $row['actif'],
                        $row['honeur'],
                        $row['optinmail'],
                        $row['Id_rolle'],
                        $row['mailparrent'],
                        $row['numparrent']
                    );
                }
            }
            return null; // Utilisateur non trouvé ou mot de passe incorrect
        } catch (PDOException $e) {
            echo "Erreur: " . $e->getMessage();
        }
    }
    public function update() {
        $db = Bdd::getInstance();
        $pdo = $db->getConnection();

        try {
            $stmt = $pdo->prepare("UPDATE Utilisateur SET nom = :nom, prenom = :prenom, num_tel = :num_tel, ddn = :ddn, email = :email, pass = :pass, actif = :actif, honeur = :honeur, optinmail = :optinmail, Id_rolle = :Id_rolle, numparrent = :numparrent, mailparrent = :mailparrent  WHERE Id_utilisateur = :Id_utilisateur");
$optin =($this->optinmail)? 1 : 0;
$honeur =($this->honeur)? 1 : 0;
$actif =($this->actif)? 1 : 0;
            $stmt->bindParam(':nom', $this->nom);
            $stmt->bindParam(':prenom', $this->prenom);
            $stmt->bindParam(':num_tel', $this->num_tel);
            $stmt->bindParam(':ddn', $this->ddn);
            $stmt->bindParam(':email', $this->email);
            // Assure le hachage du mot de passe lors de la mise à jour
            $hashed = $this->pass;
            if (!password_get_info($hashed)['algo']) {
                $hashed = password_hash($hashed, PASSWORD_DEFAULT);
            }
            $this->pass = $hashed;
            $stmt->bindParam(':pass', $hashed);
            $stmt->bindParam(':actif', $actif);
            $stmt->bindParam(':honeur', $honeur);
            $stmt->bindParam(':optinmail', $optin );
            $stmt->bindParam(':Id_rolle', $this->Id_rolle);
            $stmt->bindParam(':numparrent', $this->numparrent);
            $stmt->bindParam(':mailparrent', $this->mailparrent);
            $stmt->bindParam(':Id_utilisateur', $this->Id_utilisateur);
            $stmt->execute();
        } catch (PDOException $e) {
            echo "Erreur: " . $e->getMessage();
            return false;
        }
    }
    public function getId_utilisateur() {
        return $this->Id_utilisateur;
    }

    public function setId_utilisateur($Id_utilisateur) {
        $this->Id_utilisateur = $Id_utilisateur;
    }

    public function getNom() {
        return $this->nom;
    }

    public function setNom($nom) {
        $this->nom = $nom;
    }

    public function getPrenom() {
        return $this->prenom;
    }

    public function setPrenom($prenom) {
        $this->prenom = $prenom;
    }

    public function getNum_tel() {
        return $this->num_tel;
    }

    public function setNum_tel($num_tel) {
        $this->num_tel = $num_tel;
    }

    public function getDdn() {
        return $this->ddn;
    }

    public function setDdn($ddn) {
        $this->ddn = $ddn;
    }

    public function getEmail() {
        return $this->email;
    }

    public function setEmail($email) {
        $this->email = $email;
    }

    public function getPass() {
        return $this->pass;
    }

    public function setPass($pass) {
        // Hache le mot de passe uniquement s'il ne l'est pas déjà
        if (!password_get_info($pass)['algo']) {
            $this->pass = password_hash($pass, PASSWORD_DEFAULT);
        } else {
            $this->pass = $pass;
        }
    }

    public function getActif() {
        return $this->actif;
    }

    public function setActif($actif) {
        $this->actif = $actif;
    }

    public function getHoneur() {
        return $this->honeur;
    }

    public function setHoneur($honeur) {
        $this->honeur = $honeur;
    }

    public function getOptinmail() {
        return $this->optinmail;
    }

    public function setOptinmail($optinmail) {
        $this->optinmail = $optinmail;
    }

    public function getId_rolle() {
        return $this->Id_rolle;
    }

    public function setId_rolle($Id_rolle) {
        $this->Id_rolle = $Id_rolle;
    }

    public function getmailparrent() {
        return $this->mailparrent;
    }

    public function setmailparrent($mailparrent) {
        $this->mailparrent = $mailparrent;
    }

    public function getnumparrent() {
        return $this->numparrent;
    }

    public function setnumparrent($numparrent) {
        $this->numparrent = $numparrent;
    }


}
