<?php
header("Content-Type: application/json");
$pdo = new PDO("sqlite:database.db");
$columns = ["vino", "cantina", "annata", "volume", "quantita", "note"];
//header("Content-Type: application/json");
switch ($_GET["intent"]) {
    case "list":
        $_GET["pageSize"] = (int) $_GET["pageSize"];
        $_GET["pageNum"] = (int) $_GET["pageNum"];

        $data = [];
        $addition = "";
        foreach ($columns as $e) {
            if (!empty($_GET[$e])) {
                $addition .= " $e LIKE ('%' || :$e || '%') AND ";
                $data[":" . $e] = $_GET[$e];
            }
        }
        $addition .= " 1=1 ";
        $sql = "SELECT * FROM Bottiglie WHERE $addition ";
        if (!in_array($_GET["orderBy"], $columns)) $by = "id";
        else $by = $_GET["orderBy"];
        if (in_array($_GET["orderHow"], ["ASC", "DESC"])) $how = $_GET["orderHow"];
        else $how = "ASC";
        $sql .= " ORDER BY $by $how";
        $sql .= " LIMIT " . $_GET["pageSize"] . " OFFSET " . ($_GET["pageSize"] * $_GET["pageNum"]);
        $p = $pdo->prepare($sql);
        $p->execute($data);
        $res = [];
        $res["rows"] = $p->fetchAll(PDO::FETCH_ASSOC);
        $sql = "SELECT COUNT(*) AS c FROM Bottiglie WHERE $addition";
        $p = $pdo->prepare($sql);
        $p->execute($data);
        $res["pagTot"] = (int)($p->fetch(PDO::FETCH_ASSOC)["c"] / $_GET["pageSize"]) + 1;
        echo json_encode($res);
        break;
    case "get":
        $p = $pdo->prepare("SELECT * FROM Bottiglie WHERE id=:id");
        $p->execute([":id" => $_GET["id"]]);
        echo json_encode($p->fetch(PDO::FETCH_ASSOC));
        break;
    case "delete":
        $p = $pdo->prepare("DELETE FROM Bottiglie WHERE id=:id");
        $p->execute([":id" => $_GET["id"]]);
        echo json_encode(["ok" => true]);
        break;
    case "update":
        $p = $pdo->prepare("UPDATE Bottiglie SET vino=:vino, cantina=:cantina, annata=:annata, volume=:volume, quantita=:quantita, note=:note, lastEdit=:lastEdit WHERE id=:id");
        $e = $p->execute([
            ":id" => $_GET["id"],
            ":vino" => $_GET["vino"],
            ":cantina" => $_GET["cantina"],
            ":annata" => $_GET["annata"],
            ":volume" => $_GET["volume"],
            ":quantita" => $_GET["quantita"],
            ":note" => $_GET["note"],
            ":lastEdit" => time()
        ]);
        echo json_encode(["ok" => $e]);
        break;
    case "add":
        $p = $pdo->prepare("INSERT INTO Bottiglie(vino, cantina, annata, volume, quantita, note, createdAt, lastEdit) VALUES(:vino, :cantina, :annata, :volume, :quantita, :note, :createdAt, :lastEdit)");
        $e = $p->execute([
            ":vino" => $_GET["vino"],
            ":cantina" => $_GET["cantina"],
            ":annata" => $_GET["annata"],
            ":volume" => $_GET["volume"],
            ":quantita" => $_GET["quantita"],
            ":note" => $_GET["note"],
            ":createdAt" => time(),
            ":lastEdit" => time()
        ]);
        echo json_encode(["ok" => $e]);
        break;
    case "complete":
        $type = $_GET["type"];
        if (!in_array($type, ["vino", "cantina", "annata", "volume", "quantita", "note"])) {
            echo json_encode([]);
            break;
        }
        $p = $pdo->prepare("SELECT DISTINCT $type FROM Bottiglie");
        $p->execute();
        $list = [];
        foreach ($p->fetchAll(PDO::FETCH_ASSOC) as $e) {
            $list[] = $e[$type];
        }
        $userInput = $_GET["query"];
        usort($list, function ($a, $b) use ($userInput) {
            similar_text($userInput, $a, $percentA);
            similar_text($userInput, $b, $percentB);

            return $percentA === $percentB ? 0 : ($percentA > $percentB ? -1 : 1);
        });
        echo json_encode(array_slice($list, 0, 20));
        break;
    case "access":
        echo json_encode(["ok" => password_verify($_GET["password"], file_get_contents("password.txt"))]);
        break;
    case "updatePassword":
        file_put_contents("password.txt", password_hash($_GET["password"], PASSWORD_DEFAULT));
        echo json_encode([]);
        break;
}