<?php
require_once(dirname(__FILE__)."/../credentials.php");

session_start();

class Security {
	public static function go($page) {
		header("Location: ".$page);
		exit();
	}

	public static function goHome() {
		self::go("/");
	}

	public static function isSignedIn() {
		global $_SESSION;

		return isset($_SESSION["id"]);
	}

	public static function checkIsSignedIn() {
		if (!self::isSignedIn()) {
			self::goHome();
		}
	}

	public static function isUserPassword($id, $password) {
		global $conn, $_SESSION;

		$credentials = new Credentials();

		$query = $conn->prepare("SELECT id, password FROM ".$credentials->usersdb()." WHERE id = ?");
		$query->bind_param("i", $id);

		$query->execute();
		$result = $query->get_result();

		if (!$result || !$result->num_rows) {
			return false;
		}

		$row = $result->fetch_assoc();

		if ($row["password"] == "") {
			return $row["id"];
		}

		if (!password_verify($password, $row["password"])) {
			return false;
		}

		return $row["id"];
	}

	public static function signIn($id, $password) {
		global $_SESSION;

		$id = self::isUserPassword($id, $password);

		if ($id !== false) {
			$_SESSION["id"] = $id;
			return true;
		}

		return false;
	}

	public static function logout() {
		global $_SESSION;

		session_destroy();
	}

	public static function htmlsafe($string) {
		return htmlspecialchars($string);
	}
}
