<?php


namespace Battles;

use SQLite3;
use SQLite3Result;

class GameLogs
{
    /**
     * Добавление записи в лог банковских операций.
     * @param int $senderId отправитель средств.
     * @param int $receiverId получатель средств.
     * @param int $amount сумма на счету после проведения операции.
     * @param string $type тип операции.
     * @param string $text комментарий.
     */
    public static function addBankLog(int $senderId, int $receiverId, int $amount, string $type, string $text)
    {
        $db = new SQLite3(GameConfigs::DB_SQLITE);
        $row = $db->prepare("INSERT INTO bank_logs (sender_id, receiver_id, amount, type, text) VALUES (?, ?, ?, ?, ?)");
        $row->bindParam(1, $senderId, SQLITE3_INTEGER);
        $row->bindParam(2, $receiverId, SQLITE3_INTEGER);
        $row->bindParam(3, $amount, SQLITE3_INTEGER);
        $row->bindParam(4, $type, SQLITE3_TEXT);
        $row->bindParam(5, $text, SQLITE3_TEXT);
        $row->execute();
        $row->close();
    }

    /**
     * Добавление записи в лог пользовательских операций (личное дело).
     * @param int $userId кому добавляется запись.
     * @param string $text текст записи.
     * @param string $type тип записи.
     * @param int $authorId кто добавляет запись. Использовать -1 для системной записи по умолчанию.
     */
    public static function addUserLog(int $userId, string $text, string $type = '', int $authorId = 0)
    {
        if (empty($authorId)) {
            $authorId = -1;
        }
        if (empty($type)) {
            $type = "system";
        }
        $db = new SQLite3(GameConfigs::DB_SQLITE);
        $row = $db->prepare("INSERT INTO users_logs (user_id, author_id, type, text) VALUES (?,?,?,?)");
        $row->bindParam(1, $userId, SQLITE3_INTEGER);
        $row->bindParam(2, $authorId, SQLITE3_INTEGER);
        $row->bindParam(3, $type, SQLITE3_TEXT);
        $row->bindParam(4, $text, SQLITE3_TEXT);
        $row->execute();
        $row->close();
    }

    public static function getUserLogs($userId = null, $type = null): SQLite3Result
    {
        $db = new SQLite3(GameConfigs::DB_SQLITE);
        $row = false;
        if ($userId && $type) {
            $query = "SELECT * FROM users_logs WHERE user_id = ? AND type = ?";
            $row = $db->prepare($query);
            $row->bindValue(1, $userId, SQLITE3_INTEGER);
            $row->bindValue(2, $type, SQLITE3_TEXT);
        } elseif ($userId && !$type) {
            $query = "SELECT * FROM users_logs WHERE user_id = ?";
            $row = $db->prepare($query);
            $row->bindValue(1, $userId, SQLITE3_INTEGER);
        } elseif (!$userId && $type) {
            $query = "SELECT * FROM users_logs WHERE type= ?";
            $row = $db->prepare($query);
            $row->bindValue(1, $type, SQLITE3_TEXT);
        } elseif (!$userId && !$type) {
            $query = "SELECT * FROM users_logs";
            $row = $db->prepare($query);
        }

        return $row->execute();
    }

    public static function addBattleLog(int $battle_id, string $text)
    {
        $db = new SQLite3(__DIR__ . '../../Database/battle.logs.getInstance');
        $row = $db->prepare('insert into newbattles (battle_id, text) values (?,?)');
        $row->bindParam(1, $battle_id, SQLITE3_INTEGER);
        $row->bindParam(2, $text, SQLITE3_TEXT);
        $row->execute();
        $row->close();
    }
}