<?php
//Programmierung: Sven Alteköster 100%
//Getestet durch: Sven Alteköster 100%

namespace ppb\Model;

use ppb\Library\Msg;

class BestellungModel extends Database
{

    /**
     * Sucht die Bestellung in der Datenbank und gibt diese im json-Format zurück.
     * @param $id gibt die id, des Benutzerkontos an, über den die Bestellung getätigt wurde. Wenn keine id angegeben wird, werden alle Einträge ausgegeben
     */
    public function selectBestellung($id = false)
    {
        $pdo = $this->linkDB();
        $sql = "SELECT Bestellung.id, Bestellung.istBezahlt, Bestellung.bestelldatum, Bestellung.gesamtpreis, Bestellung.kid FROM Bestellung";
        $params = array();
        //Ist eine id angegeben wird der Datensatz in der Datenbank gesucht
        if ($id !== false) {
            $sql .= " INNER JOIN Kind k ON k.id = kid INNER JOIN Benutzerkonto b ON b.id = bid";
            $sql .= " WHERE bid = :bid";
            $params["bid"] = $id;
        }

        //Ausführen des SQL befehls
        try {
            $stmt = $pdo->prepare($sql);
            $stmt->execute($params);
        } catch (\PDOException $e) {
            echo $e;
            return false;
        }
        $result = $stmt->fetchAll(\PDO::FETCH_ASSOC);

        //Die Datensätze werden nummeriert
        foreach ($result as $key => $row) {
            $result[$key]["id"] += 0;
        }

        return $result;
    }

    /**
     * Fügt ein Bestellung in die Datenbank ein.
     * @param $data gibt die Attribute des Datensatzes an.
     */
    public function insertBestellung($data)
    {
        $pdo = $this->linkDB();
        $sql = "INSERT INTO Bestellung (" . implode(",", array_keys($data)) . ") VALUES(:" . implode(",:", array_keys($data)) . ")";

        try {
            $stmt = $pdo->prepare($sql);
            $result = $stmt->execute($data);
        } catch (\PDOException $e) {
            echo $e;
        }
        return $result;
    }

    /**
     * Updatet einen Datensatz in der Bestellung Tabelle.
     * @param $id des Datensatzes
     * @param $data neue Parameter des Datensatzes
     */
    public function updateBestellung($id, $data)
    {
        $pdo = $this->linkDB();
        $sql = "UPDATE Bestellung SET ";
        //Fügt alle Parameter und einen Platzhalter in den SQL Befehl ein
        foreach (array_keys($data) as $key) {
            $sql .= $key . " = :" . $key . ",";
        }
        $sql = substr_replace($sql, "", -1) . " WHERE id = :id";
        $data["id"] = $id;
        try {
            $stmt = $pdo->prepare($sql);
            $result = $stmt->execute($data);
        } catch (\PDOException $e) {
            echo $e;
            return false;
        }
        return $result;
    }

    /**
     * Löscht ein Bestellung aus der Tabelle
     * @param $id des zu löschenden Bestellung
     */
    public function deleteBestellung($id)
    {
        $pdo = $this->linkDB();
        $sql = "DELETE FROM Bestellung WHERE id = :id";
        $params = array();
        $params[":id"] = $id;
        try {
            $stmt = $pdo->prepare($sql);
            $result = $stmt->execute($params);
        } catch (\PDOException $e) {
            echo $e;
            return false;
        }
        return $result;
    }

}