<!-- 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
/*
======================
Eelpakkumise klass
======================
*/
class Eelpakkumine
{
    
    private $conn;
    private $tabel = "eelpakkumised";
    
    public $id;
    public $eseme_id;
    public $kasutaja_id;
    public $summa;
    public $aeg;
    public $eelpakkumisteArv;
    public $eelnevEelpakkumine = 0;
    
    public function __construct($db)
    {
        $this->conn = $db;
    }

    function vastabSammule($pakkumine)
    {
        // Kas tehtav pakkumine on kooskõlas pakkumise sammudega?
        if ($pakkumine < 10) {
            return true;
        } elseif ($pakkumine < 50) {
            if ($pakkumine % 2 != 0) {
                return false;
            } else {
                return true;
            }
        } elseif ($pakkumine < 100) {
            if ($pakkumine % 5 != 0) {
                return false;
            } else {
                return true;
            }
        } elseif ($pakkumine < 500) {
            if ($pakkumine % 10 != 0) {
                return false;
            } else {
                return true;
            }
        } elseif ($pakkumine < 5000) {
            if ($pakkumine % 50 != 0) {
                return false;
            } else {
                return true;
            }
        } elseif ($pakkumine >= 5000) {
            if ($pakkumine % 100 != 0) {
                return false;
            } else {
                return true;
            }
        }
    }
    
    function sooritaEelpakkumine()
    {
        // Sisestame eelpakkumsie andmebaasi.
        $query = "INSERT INTO eelpakkumised SET eseme_id= ?, kasutaja_id= ?, summa= ?, aeg= ?;
        UPDATE esemed_saal SET eelpakkumised= ? WHERE id = ?";
        
        $stmt = $this->conn->prepare($query);
        $this->eelpakkumisteArv += 1;
        $stmt->bindParam(1, $this->eseme_id);
        $stmt->bindParam(2, $this->kasutaja_id);
        $stmt->bindParam(3, $this->summa);
        $stmt->bindParam(4, $this->aeg);
        $stmt->bindParam(5, $this->eelpakkumisteArv);
        $stmt->bindParam(6, $this->eseme_id);
        
        $stmt->execute();
    }
    
    function eelnevateKontroll()
    {   
        $query = "SELECT summa FROM " . $this->tabel . " WHERE eseme_id= ? AND kasutaja_id = ? ORDER BY summa DESC LIMIT 1";
        
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $this->eseme_id);
        $stmt->bindParam(2, $this->kasutaja_id);
        $stmt->execute();
        $row                      = $stmt->fetch(PDO::FETCH_ASSOC);
        $this->eelnevEelpakkumine = $row['summa'];
    }
    
    function readByEsemeID()
    {
        // Loeme eseme andmed ID järgi.
        $query = "SELECT kasutaja_id, summa, aeg FROM " . $this->tabel . " WHERE eseme_id = ? ORDER BY id DESC";
        
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $this->eseme_id);
        $stmt->execute();
        
        return $stmt;
    }
    
    function looEelpakkumine()
    {
        // Eelpakkumise edastamise peafunktsioon.
        // POST väärtuste salvestamine.
        $this->eseme_id    = htmlspecialchars(strip_tags($this->eseme_id));
        $this->kasutaja_id = htmlspecialchars(strip_tags($this->kasutaja_id));
        $this->pakkumine   = htmlspecialchars(strip_tags($this->summa));
        $this->aeg         = htmlspecialchars(strip_tags($this->aeg));
        
        $query_eelpakkumised = "SELECT eelpakkumised FROM esemed_saal WHERE id = ?";
        $stmt_eelpakkumised  = $this->conn->prepare($query_eelpakkumised);
        $stmt_eelpakkumised->bindParam(1, $this->eseme_id);
        $stmt_eelpakkumised->execute();
        
        $row                    = $stmt_eelpakkumised->fetch(PDO::FETCH_ASSOC);
        $this->eelpakkumisteArv = $row['eelpakkumised'];
        
        if ($this->vastabSammule($this->summa)) {
            // Kas kasutaja on eelnevalt juba eelpakkumisi teinud?
            $this->eelnevateKontroll();
            if ($this->eelnevEelpakkumine != 0) {
                // Kasutajal on eelnev eelpakkumine.
                if ($this->eelnevEelpakkumine >= $this->summa) {
                    // Tehtud eelpakkumine on varasemast väiksem.
                    echo "<div class=\"alert alert-danger alert-dismissable\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>Teie eelpakkumine ei ületa teie varasemat eelpakkumist.</div>";
                } else {
                    // Uus eelpakkumine on varasemast suurem. Sooritame eelpakkumise.
                    $this->sooritaEelpakkumine();
                    echo "<div class=\"alert alert-success alert-dismissable\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>Teie eelpakkumine on vastu võetud.</div>";
                }
            } else {
                // Varasemaid eelpakkumisi ei ole. Sooritame eelpakkumise.
                $this->sooritaEelpakkumine();
                echo "<div class=\"alert alert-success alert-dismissable\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>Teie eelpakkumine on vastu võetud.</div>";
            }
            
        } else {
            echo "<div class=\"alert alert-danger alert-dismissable\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>Teie eelpakkumine ei ole kooskõlas pakkumise sammudega.</div>";
        }
    }
}
