<?php
class Vars{
	public $site        = [];
	public $personal    = [];
	private $db         = null;
	private $sid        = 0;
	private $state      = 0; # default (0) | force-save (1)
	public function __construct($db, $sid){
		$this->db       = $db;
		$this->sid      = $sid;
        $this->Load();
		return true;
	}

    public function __destruct(){
        if ($this->state == 1){
            $this->Save();
        }
    }

    public function GetLocalKey($key){
        if ($key == "module_chat_enable")    return '<code>'.$key.'</code> [Модуль] [Чат] Включен ли модуль';
        if ($key == "module_chat_guest_view") return '<code>'.$key.'</code> [Модуль] [Чат] Могут ли гости читать чат?';
        if ($key == "module_gb_enable")    return '<code>'.$key.'</code> [Модуль] [Гостевая] Включен ли модуль';
        if ($key == "module_gb_guest_view") return '<code>'.$key.'</code> [Модуль] [Гостевая] Могут ли гости читать гостеую книгу?';
        if ($key == "module_gb_guest_write") return '<code>'.$key.'</code> [Модуль] [Гостевая] Могут ли гости писать в гостеую книгу?';
        if ($key == "module_gb_captcha") return '<code>'.$key.'</code> [Модуль] [Гостевая] Требовать ввода кода с картинки';
        if ($key == "module_gb_automod") return '<code>'.$key.'</code> [Модуль] [Гостевая] Автоматический модерировать все сообщения?';
        if ($key == "module_avatar")    return '<code>'.$key.'</code> [Модуль] [Смена аватара] Включен ли модуль';
        if ($key == "ellynet_debug")    return '<code>'.$key.'</code> [EllyNet] Включить вывод дебаг-информации';
        if ($key == "ellynet_debug_ip") return '<code>'.$key.'</code> [EllyNet] Дебаг информация только для указанного IP-адреса';
        if ($key == "user_registration") return '<code>'.$key.'</code> Включена ли регистрация пользователей?';
        if ($key == "items_per_page") return '<code>'.$key.'</code> Кол-во элементов на страницах';
        
        if ($key == "captcha_letters") return '<code>'.$key.'</code> [Код с картинки] Символы';
        if ($key == "captcha_letters_count") return '<code>'.$key.'</code> [Код с картинки] Кол-во символов';
        if ($key == "captcha_font_path") return '<code>'.$key.'</code> [Код с картинки] Путь к шрифту';
        if ($key == "captcha_font_size") return '<code>'.$key.'</code> [Код с картинки] Размер шрифта';
        if ($key == "captcha_letters_min_angle") return '<code>'.$key.'</code> [Код с картинки] Мин. поворот символа';
        if ($key == "captcha_letters_max_angle") return '<code>'.$key.'</code> [Код с картинки] Макс. поворот символа';
        if ($key == "captcha_color_min_r") return '<code>'.$key.'</code> [Код с картинки] [RGB] Мин. цвет R';
        if ($key == "captcha_color_max_r") return '<code>'.$key.'</code> [Код с картинки] [RGB] Макс. цвет R';
        if ($key == "captcha_color_min_g") return '<code>'.$key.'</code> [Код с картинки] [RGB] Мин. цвет G';
        if ($key == "captcha_color_max_g") return '<code>'.$key.'</code> [Код с картинки] [RGB] Макс. цвет G';
        if ($key == "captcha_color_min_b") return '<code>'.$key.'</code> [Код с картинки] [RGB] Мин. цвет B';
        if ($key == "captcha_color_max_b") return '<code>'.$key.'</code> [Код с картинки] [RGB] Макс. цвет B';
        if ($key == "captcha_width") return '<code>'.$key.'</code> [Код с картинки] Ширина';
        if ($key == "captcha_height") return '<code>'.$key.'</code> [Код с картинки] Высота';
        
        if ($key == "module_profile_enabled") return '<code>'.$key.'</code> [Профиль] Включен ли модуль';
        if ($key == "module_profile_guest_view") return '<code>'.$key.'</code> [Профиль] Могут ли гости смотреть профиль?';
        
        if ($key == "module_news_enabled") return '<code>'.$key.'</code> [Новости] Включен ли модуль';
        if ($key == "module_news_guest_view") return '<code>'.$key.'</code> [Новости] Могут ли гости смотреть новости?';
        
        if ($key == "module_balls_chat") return '<code>'.$key.'</code> [Баллы активности] Множитель за одно сообщение в чате';
        if ($key == "module_balls_comments") return '<code>'.$key.'</code> [Баллы активности] Множитель за один комментарий';
        if ($key == "module_balls_download_file") return '<code>'.$key.'</code> [Баллы активности] Множитель за один загруженный файл';
        if ($key == "module_balls_forum_message") return '<code>'.$key.'</code> [Баллы активности] Множитель за одно сообщение на форуме';
        if ($key == "module_balls_forum_topics") return '<code>'.$key.'</code> [Баллы активности] Множитель за одну тему на форуме';
        if ($key == "module_balls_guestbook") return '<code>'.$key.'</code> [Баллы активности] Множитель за одно сообщение в гостевой книге';
        if ($key == "module_balls_news") return '<code>'.$key.'</code> [Баллы активности] Множитель за одну добавленную новость';
        
        return '<code>'.$key.'</code>';
    }

	public function Default(){
		$this->DefS("module_avatar", 0);
        $this->DefS("user_registration", 1);

        $this->DefS("items_per_page", 10);

		$this->DefS("module_chat_enable", 1);
		$this->DefS("module_chat_guest_view", 1);

		$this->DefS("module_gb_enable", 1);
		$this->DefS("module_gb_guest_view", 1);
		$this->DefS("module_gb_guest_write", 1);
		$this->DefS("module_gb_captcha", 1);
		$this->DefS("module_gb_automod", 0);

        $this->DefS("module_news_enabled", 1);
        $this->DefS("module_news_guest_view", 0);

        $this->DefS("module_profile_enabled", 1);
        $this->DefS("module_profile_guest_view", 0);

        $this->DefS("module_balls_chat", 1);
        $this->DefS("module_balls_comments", 1);
        $this->DefS("module_balls_download_file", 25);
        $this->DefS("module_balls_forum_message", 5);
        $this->DefS("module_balls_forum_topics", 10);
        $this->DefS("module_balls_guestbook", 1);
        $this->DefS("module_balls_news", 3);
        #$this->DefS("module_profile_");


        $this->DefS("module_forum_enable", 1);
        $this->DefS("module_forum_guest_view", 1);
        $this->DefS("forum_category_per_page", 25);
        $this->DefS("forum_topics_per_page", 25);
        
        
        # 
	}

	public function Load(){
		$data = $this->db->getObject("SELECT * FROM `vars` WHERE `sid` = '".$this->sid."' LIMIT 1");
		if ($data != NULL){
            $this->site = json_decode($data->site, true);
            $this->personal = json_decode($data->personal, true);
            if ($this->site == NULL || !is_array($this->site)) $this->site = [];
            if ($this->personal == NULL || !is_array($this->personal)) $this->personal = [];
        } else {
            $this->db->Query("INSERT INTO `vars`(`sid`) VALUES ('".$this->sid."');");
            $this->Save();
        }
        $this->Default();
	}

	public function Save(){
        $this->db->Query("UPDATE `vars` SET `site`='".json_encode($this->site)."' WHERE `sid` = '".$this->sid."' LIMIT 1");
        $this->db->Query("UPDATE `vars` SET `personal`='".json_encode($this->personal)."' WHERE `sid` = '".$this->sid."' LIMIT 1");
	}

    function GetS($key){
        return (isset($this->site[$key])?$this->site[$key]:NULL);
    }

    function GetP($key){
        return (isset($this->personal[$key])?$this->personal[$key]:NULL);
    }

    function SetS($key, $val){
        $this->site[$key] = $val;
    }

    function SetP($key, $val){
        $this->personal[$key] = $val;
    }

    function DefS($key, $val){
        if (!isset($this->site[$key])){
            $this->site[$key] = $val;
            $this->state = 1;
            return $val;
        }
        return $this->site[$key];
    }

    function DefP($key, $val){
        if (!isset($this->personal[$key])){
            $this->personal[$key] = $val;
            $this->state = 1;
            return $val;
        }
        return $this->personal[$key];
    }

    function DelS($key){
        if (isset($this->site[$key])){
            unset($this->site[$key]);
        }
    }

    function DelP($key){
        if (isset($this->personal[$key])){
            unset($this->personal[$key]);
        }
    }
}