<!-- Realisatsiooni aluseks on võetud:
PHP Object Oriented CRUD Example with Bootstrap
Kasutatud 6.04.2016
https://www.codeofaninja.com/2014/06/php-object-oriented-crud-example-oop.html
-->

<?php
/*
======================
Oksjoni klass
======================
*/
class Oksjon
{
    
    private $conn;
    private $tabel = "oksjonid";
    
    public $id;
    public $nimi;
    public $kirjeldus;
    public $kategooria_id;
    public $alghind;
    public $hetkehind;
    public $algusaeg;
    public $pakkumised;
    public $kestvus;
    public $lopuaeg;
    
    public function __construct($db)
    {
        $this->conn = $db;
    }
    
    function create()
    {
        // Uue internetioksjoni loomine
        $query = "INSERT INTO " . $this->tabel . " SET nimi= ?, kirjeldus= ?, kategooria_id= ?,alghind= ?, hetkehind= ?, kestvus= ?, algusaeg= ?, lopuaeg= ?";
        
        $stmt = $this->conn->prepare($query);
        
        $this->nimi          = htmlspecialchars(strip_tags($this->nimi));
        $this->kirjeldus     = htmlspecialchars(strip_tags($this->kirjeldus));
        $this->kategooria_id = htmlspecialchars(strip_tags($this->kategooria_id));
        $this->alghind       = htmlspecialchars(strip_tags($this->alghind));
        $this->hetkehind     = htmlspecialchars(strip_tags($this->hetkehind));
        $this->kestvus       = htmlspecialchars(strip_tags($this->kestvus));
        $this->algusaeg      = htmlspecialchars(strip_tags($this->algusaeg));
        $this->lopuaeg       = htmlspecialchars(strip_tags($this->lopuaeg));
        
        $stmt->bindParam(1, $this->nimi);
        $stmt->bindParam(2, $this->kirjeldus);
        $stmt->bindParam(3, $this->kategooria_id);
        $stmt->bindParam(4, $this->alghind);
        $stmt->bindParam(5, $this->hetkehind);
        $stmt->bindParam(6, $this->kestvus);
        $stmt->bindParam(7, $this->algusaeg);
        $stmt->bindParam(8, $this->lopuaeg);
        
        if ($stmt->execute()) {
            return true;
        } else {
            return false;
        }
    }
    
    function readAktiivsed($page, $from_record_num, $records_per_page)
    {
        // Aktivisete internetioksjonite lugemine
        $query = "SELECT id, nimi, kirjeldus, kategooria_id, alghind, hetkehind, pakkumised, kestvus, algusaeg, lopuaeg FROM " . $this->tabel . " WHERE algusaeg < now() AND lopuaeg > now() ORDER BY lopuaeg ASC LIMIT {$from_record_num}, {$records_per_page}";
        
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        
        return $stmt;
    }
    
    
    function readOotel($page, $from_record_num, $records_per_page)
    {
        // Ootel internetioksjonite lugemine
        $query = "SELECT id, nimi, kirjeldus, kategooria_id, alghind, hetkehind, pakkumised, kestvus, algusaeg, lopuaeg FROM " . $this->tabel . " WHERE algusaeg > now() ORDER BY nimi ASC LIMIT {$from_record_num}, {$records_per_page}";
        
        $stmt = $this->conn->prepare($query);
        
        $stmt->execute();
        
        return $stmt;
    }
    
    function readLoppenud($page, $from_record_num, $records_per_page)
    {
        // Lõppenud internetioksjonite lugemine
        $query = "SELECT id, nimi, kirjeldus, kategooria_id, alghind, hetkehind, pakkumised, kestvus, algusaeg, lopuaeg FROM " . $this->tabel . " WHERE lopuaeg < now() ORDER BY nimi ASC LIMIT {$from_record_num}, {$records_per_page}";
        
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        
        return $stmt;
    }
    
    function readAll($page, $from_record_num, $records_per_page)
    {
        // Kõikide internetioksjonite lugemine
        $query = "SELECT id, nimi, kirjeldus, kategooria_id, alghind, hetkehind, pakkumised, kestvus, algusaeg, lopuaeg FROM " . $this->tabel . " ORDER BY algusaeg ASC LIMIT {$from_record_num}, {$records_per_page}";
        
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        
        return $stmt;
    }
    
    function readAllCat($page, $from_record_num, $records_per_page, $kategooria)
    {
        // Kategooria ID järgi kõikide sinna kuuluvate internetioksjonite lugemine
        if (strpos($kategooria, '?page') !== false) {
            $kategooria = substr($kategooria, 0, strpos($kategooria, "?p"));
            
        }
        $query = "SELECT id, nimi, kirjeldus, alghind, hetkehind, pakkumised, kestvus, algusaeg, lopuaeg FROM " . $this->tabel . " WHERE kategooria_id = $kategooria AND algusaeg < now() AND lopuaeg > now() ORDER BY algusaeg DESC LIMIT {$from_record_num}, {$records_per_page}";
        
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        
        return $stmt;
    }
    
    function readOne()
    {
        // ID järgi internetioksjoni detailide lugemine
        $query = "SELECT nimi, kirjeldus, kategooria_id, alghind, hetkehind, pakkumised, kestvus, algusaeg, lopuaeg FROM " . $this->tabel . " WHERE id = ? LIMIT 0,1";
        
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $this->id);
        $stmt->execute();
        
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        
        $this->nimi          = $row['nimi'];
        $this->kirjeldus     = $row['kirjeldus'];
        $this->kategooria_id = $row['kategooria_id'];
        $this->alghind       = $row['alghind'];
        $this->hetkehind     = $row['hetkehind'];
        $this->pakkumised    = $row['pakkumised'];
        $this->kestvus       = $row['kestvus'];
        $this->algusaeg      = $row['algusaeg'];
        $this->lopuaeg       = $row['lopuaeg'];
        
    }
    
    function showOne($id)
    {
        // Ühe konkreetse internetioksjoni andmete lugemine oksjoni ID järgi
        $query = "SELECT nimi, kirjeldus, kategooria_id, alghind, hetkehind, pakkumised, kestvus, algusaeg, lopuaeg FROM " . $this->tabel . " WHERE id = $id";
        
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        
        return $stmt;
        
    }
    
    function update()
    {
        // Internetioksjoni uuendamine
        $query = "UPDATE " . $this->tabel . " SET nimi = :nimi, kirjeldus = :kirjeldus, kategooria_id = :kategooria_id, alghind = :alghind WHERE id = :id";
        
        $stmt = $this->conn->prepare($query);
        
        $this->nimi          = htmlspecialchars(strip_tags($this->nimi));
        $this->kirjeldus     = htmlspecialchars(strip_tags($this->kirjeldus));
        $this->kategooria_id = htmlspecialchars(strip_tags($this->kategooria_id));
        $this->alghind       = htmlspecialchars(strip_tags($this->alghind));
        $this->id            = htmlspecialchars(strip_tags($this->id));
        
        $stmt->bindParam(':nimi', $this->nimi);
        $stmt->bindParam(':kirjeldus', $this->kirjeldus);
        $stmt->bindParam(':kategooria_id', $this->kategooria_id);
        $stmt->bindParam(':alghind', $this->alghind);
        $stmt->bindParam(':id', $this->id);
        
        if ($stmt->execute()) {
            return true;
        } else {
            return false;
        }
    }
    
    function delete()
    {
        // Internetioksjoni kustutamine
        $query = "DELETE FROM " . $this->tabel . " WHERE id = ?";
        
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $this->id);
        
        if ($result = $stmt->execute()) {
            return true;
        } else {
            return false;
        }
    }
    
    public function countAll()
    {
        // Kõikide aktiivsete oksjonite kirjete lugemine internetioksjonite andmebaasist
        $query = "SELECT id FROM " . $this->tabel . " WHERE algusaeg < now() AND lopuaeg > now()";
        
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        
        $num = $stmt->rowCount();
        
        return $num;
    }
}