<?php

class Auteur
{
	// attributs
    private ?int $numAuteur;
    private ?string $nom;
    private ?string $prenom;
    private ?int $anneeNaissance;

    // getter

    public function __construct($nu = NULL, $n = NULL, $p = NULL, $a = NULL)
    {
        if (!is_null($nu)) {
            $this->numAuteur = $nu;
            $this->nom = $n;
            $this->prenom = $p;
            $this->anneeNaissance = $a;
        }
    }

    public static function getAllAuteurs()
    {
        // écriture de la requête
        $requete = "SELECT * FROM Auteur;";
        // envoi de la requête et stockage de la réponse
        $resultat = Database::pdo()->query($requete);
        // traitement de la réponse
        $resultat->setFetchmode(PDO::FETCH_CLASS, 'Auteur');
        $tableau = $resultat->fetchAll();
        return $tableau;
    }

    public static function getAuteurByNum($numAuteur)
    {
        // écriture de la requête
        $requetePreparee = "SELECT * FROM Auteur WHERE numAuteur = :num_tag;";
        $req_prep = Database::pdo()->prepare($requetePreparee);
        // le tableau des valeurs
        $valeurs = array("num_tag" => $numAuteur);
        try {
            // envoi de la requête
            $req_prep->execute($valeurs);
            // traitement de la réponse
            $req_prep->setFetchmode(PDO::FETCH_CLASS, 'Auteur');
            // récupération de l'auteur
            $a = $req_prep->fetch();
            // retour
            return $a;
        } catch (PDEException $e) {
            echo $e->getMessage();
        }
    }

    public function getNumAuteur()
    {
        return $this->numAuteur;
    }

    // setter

    public function setNumAuteur($nu)
    {
        $this->numAuteur = $nu;
    }

    public function getNom()
    {
        return $this->nom;
    }

    public function setNom($n)
    {
        $this->nom = $n;
    }

    public function getPrenom()
    {
        return $this->prenom;
    }

    // un constructeur

    public function setPrenom($p)
    {
        $this->prenom = $p;
    }

    // une methode d'affichage.

    public function getAnneeNaissance()
    {
        return $this->anneeNaissance;
    }

    // méthode static qui retourne les auteurs en un tableau d'objets

    public function setAnneeNaissance($a)
    {
        $this->anneeNaissance = $a;
    }

    // méthode static qui retourne un auteur identifié par son numAuteur

    public function afficher()
    {
        echo "<p>auteur $this->prenom $this->nom, né(e) en $this->anneeNaissance </p>";
    }

}

?>