<?php
session_start();
require_once 'vendor/autoload.php';

class MainSystem
{

    public $db;
    function __construct()
    {



?>

        <div class='login_pop_up_loading' hidden id='center_outer_div_loading'></div>
        <div class='login_pop_up_form_loading' hidden id='center_div_loading'>
            <h1 id='online_status'>LOADING...</h1>
        </div>

        <script>
            var selected_frame = 1;

            setInterval(online_status, 500);
            setInterval(check_session_status, 1000);

            function stop_loading() {
                document.getElementById('center_outer_div_loading').hidden = true;
                document.getElementById('center_div_loading').hidden = true;
            }

            function loading() {
                document.getElementById('center_outer_div_loading').hidden = false;
                document.getElementById('center_div_loading').hidden = false;
                setTimeout(stop_loading, 3000);
            }
            loading();

            function check_session_status() {
                const xhttp = new XMLHttpRequest();
                // Define a callback function
                xhttp.onload = function() {
                    // Here you can use the DataW
                    if (this.responseText == 1) {
                        document.getElementById('center_outer_div_login').hidden = false;
                        document.getElementById('center_div_login').hidden = false;
                    } else {
                        document.getElementById('center_outer_div_login').hidden = true;
                        document.getElementById('center_div_login').hidden = true;
                        stop_loading();

                    }
                }
                xhttp.open("GET", '/WebBuilder/ajax_check_session.php');
                xhttp.send();
            }

            function online_status() {
                if (window.navigator.onLine == false) {
                    document.getElementById('center_outer_div_online').hidden = false;
                    document.getElementById('center_div_online').hidden = false;
                } else {
                    document.getElementById('center_outer_div_online').hidden = true;
                    document.getElementById('center_div_online').hidden = true;
                }

            }
        </script>
        <?php
        try {
            $db = new DBMain();
            $this->db = $db;
        } catch (Exception $e) {
            echo $e;
        }
    }

    function Login_popup()
    {
        ?>

        <div class='login_pop_up_background' id='center_outer_div_login'></div>
        <div class='login_pop_up_background' id='center_outer_div_online'></div>
        <div class='login_pop_up_form' id='center_div_online' hidden>
            <h1 id='online_status'>YOUR OFFLINE PLEASE WAIT...</h1>
        </div>
        <div class='login_pop_up_form' id='center_div_login'>
            <h1 id='login_status'>LOGIN</h1>
            <input type='text' id='username' placeholder="USERNAME" class='input' /><br><br>
            <input type='password' id='password' placeholder="PASSWORD" class='input' /><br><br>
            <input type='submit' name='submit' value='LOGIN' onclick='login()' class='button' /><br><br>

            <script>
                function login() {
                    username = document.getElementById('username').value;
                    password = document.getElementById('password').value;

                    const xhttp = new XMLHttpRequest();
                    // Define a callback function
                    xhttp.onload = function() {
                        // Here you can use the Data
                        if (this.responseText.indexOf("FAILED") < 1) {
                            document.getElementById('center_outer_div_login').hidden = true;
                            document.getElementById('center_div_login').hidden = true;
                        } else {
                            alert(this.responseText);
                            document.getElementById('login_status').innerHTML = "USERNAME OR PASSWORD INCORRECT";
                        }
                    }
                    xhttp.open("GET", '/WebBuilder/ajax_login.php?username=' + username + "&password=" + password);
                    xhttp.send();
                }
            </script>
        </div>
    <?php
    }

    function add_rand_data($table_name = '', $amount = '')
    {
        $index = 0;
        while ($index <= 100) {
            echo $this->db->insert("INSERT INTO clients (clients_name) VALUES ('test_$index')");
            $index++;
        }
    }
}

class html_header
{

    public $title;

    function __construct($style_sheet = '../Styles/styles.css?v1.1.1.1')
    {

    ?>
        <html>

        <head>
            <link rel="stylesheet" href="<? echo $style_sheet; ?>">
            <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
        <?
    }

    function set_headers($title = "", $styles_custom_links = [], $js_queries = [])
    {
        $this->title = $title;
        ?>
            <title>
                <? echo $title; ?>
            </title>

            <?

            foreach ($styles_custom_links as $links) {
            ?>

                <link rel="stylesheet" href="<? echo $links ?> ">
            <?
            }

            foreach ($js_queries as $scripts) {
            ?>
                <script>
                    <? echo $scripts; ?>
                </script>
            <?
            }
        }


        function __destruct()
        {
            ?>
        </head>
    <?
        }
    }

    class HTML_Body
    {

        function __construct()
        {
    ?>
        <div class='right_side_display' id='right_side_display'>
            <div class='tabs_container'>
                <button class='tabs' id='tab_1' onclick='show_iframe(1)'>HOME</button>
                <button class='tabs' id='tab_2' onclick='show_iframe(2)'>EMPTY</button>
                <button class='tabs' id='tab_3' onclick='show_iframe(3)'>EMPTY</button>
                <button class='tabs' id='tab_4' onclick='show_iframe(4)'>EMPTY</button>

            </div>
            <iframe class='i_frame_1' loading='lazy' id="iframe_1" style="display: block;" src='/WebApp/index.php'>

            </iframe>
            <iframe class='i_frame_1' loading='lazy' id="iframe_2" style="display: none;" src='/WebApp/index.php'>

            </iframe>
            <iframe class='i_frame_1' loading='lazy' id="iframe_3" style="display: none;" src='/WebApp/index.php'>

            </iframe>
            <iframe class='i_frame_1' loading='lazy' id="iframe_4" style="display: none;" src='/WebApp/index.php'>

            </iframe>


        </div>
        <script>
            document.getElementById('tab_' + selected_frame).style.backgroundColor = 'white';

            function LoadLink(link) {

                document.getElementById('iframe_' + selected_frame).src = link;
                document.getElementById('tab_' + selected_frame).innerHTML = link.replace('/WebApp/', '').replace('.php', '').replace('_', ' ').toUpperCase();
            }

            function show_iframe(iframe) {
                index = 1;
                while (index <= 4) {
                    document.getElementById('iframe_' + index).style.display = 'none';
                    document.getElementById('tab_' + index).style.backgroundColor = 'grey';
                    document.getElementById('tab_' + selected_frame).style.width = '7%';

                    index++;
                }
                document.getElementById('iframe_' + iframe).style.display = 'block';
                document.getElementById('tab_' + selected_frame).style.width = '16%';
                document.getElementById('tab_' + iframe).style.backgroundColor = 'white';


                selected_frame = iframe;

            }
        </script>
    <?
        }
    }


    class HTML_navbar
    {

        public array $navegations;

        function __construct()
        {
            $myfile = fopen($_SERVER['DOCUMENT_ROOT'] . "/WebBuilder/navbar.txt", "r") or die("Unable to open file!");
            $data = fread($myfile, filesize($_SERVER['DOCUMENT_ROOT'] . "/WebBuilder/navbar.txt"));
            $links = explode("|", $data);

            $this->navegations = $links;
            fclose($myfile);
        }

        function __destruct()
        {
    ?>

        <div class="navbar" id='navbar'>
            <input type='text' id='nav_status' hidden value='OPEN' />
            <div class="nav_button fa fa-bars" id='nav_button_' onclick='nav_show_hide()'>

            </div>

            <?
            $index = 0;

            foreach ($this->navegations as $headers) {

                $header_info = explode(':', $headers);
                if (strlen($header_info[0]) > 1) {
                    echo "<button class='dropdown-btn' onclick='show_nav($index)' id='links_$index'><i id='links_i_$index' class='fa fa-caret-down'></i>  " . "<p style='padding-left:5px' id='label_i_$index'>  " . strtoupper($header_info[0]) . "</P>" . "
                            
                        </button>";
                    echo "<input type='text' id='state_$index' hidden value='NO' />";
                    echo "<div class='dropdown-container' id='drop_$index'>";
                    $buttons = explode(';', $header_info[1]);
                    foreach ($buttons as $navs) {
                        if (strlen($navs) > 0) {
                            $nav = explode('->', $navs);
                            $link = "/WebApp/{$nav[1]}";
            ?>
                            <div class='nav_links' id='links_<? echo $nav[0]; ?>' onclick='LoadLink("<? echo $link; ?>")'>
                                <? echo strtoupper($nav[0]); ?>
                            </div>
            <?
                        }
                    }
                    echo "</div>";
                }
                $index++;
            } ?>




            <script>
                function LoadLink(link) {
                    document.getElementById('iframe_' + selected_frame).src = link;
                    document.getElementById('tab_' + selected_frame).innerHTML = link.replace('/WebApp/', '').replace('.php', '').replace('_', ' ').toUpperCase();

                }

                function show_nav(index) {
                    var nav_max = <? echo "$index" ?>;
                    nav_max = nav_max - 1;
                    for (var i = 0; i < nav_max; i++) {

                        if (i == index) {
                            if (document.getElementById('state_' + index).value == 'NO') {
                                document.getElementById('drop_' + index).style.display = 'block';
                                document.getElementById("links_i_" + i).style.transform = "rotate(-90deg)";
                                if (document.getElementById("nav_status").value == "CLOSED") {
                                    nav_show_hide();
                                }
                                document.getElementById('state_' + index).value = 'YES';
                            } else {
                                document.getElementById('drop_' + index).style.display = 'none';
                                document.getElementById("links_i_" + i).style.transform = "rotate(0deg)";
                                document.getElementById('state_' + index).value = 'NO';
                            }
                        } else {
                            document.getElementById('drop_' + i).style.display = 'none';
                            document.getElementById("links_i_" + i).style.transform = "rotate(0deg)";
                            document.getElementById('state_' + i).value = 'NO';
                        }
                    }

                }

                function nav_show_hide() {
                    var nav_show_hide_index = 0;
                    nav_icons = ["fa-user", "fa-user-circle-o", "fa-users"];
                    var nav_max = <? echo "$index" ?>;
                    nav_max = nav_max - 1;
                    if (document.getElementById("nav_status").value == "CLOSED") {
                        document.getElementById("navbar").style.width = "15vw";
                        document.getElementById("nav_button_").style.left = "11vw";
                        document.getElementById("nav_status").value = "OPEN";
                        document.getElementById("right_side_display").style.width = "84%";
                        document.getElementById("nav_button_").style.transform = "rotate(0deg)";
                        while (nav_show_hide_index < nav_max) {
                            document.getElementById("links_i_" + nav_show_hide_index).classList.remove(nav_icons[nav_show_hide_index]);
                            document.getElementById("links_i_" + nav_show_hide_index).classList.add("fa-caret-down");
                            document.getElementById("links_i_" + nav_show_hide_index).style.transform = "rotate(0deg)";
                            document.getElementById("label_i_" + nav_show_hide_index).style.display = "block";
                            document.getElementById("links_" + nav_show_hide_index).style.justifyContent = "flex-start";
                            nav_show_hide_index++;
                        }

                    } else if (document.getElementById("nav_status").value == "OPEN") {
                        document.getElementById("navbar").style.width = "5vw";
                        document.getElementById("nav_status").value = "CLOSED";
                        document.getElementById("nav_button_").style.left = "1vw";
                        document.getElementById("right_side_display").style.width = "94%";
                        document.getElementById("nav_button_").style.transform = "rotate(0deg)";
                        while (nav_show_hide_index < nav_max) {
                            if (document.getElementById('state_' + nav_show_hide_index).value == 'YES') {
                                show_nav(nav_show_hide_index);
                            }
                            document.getElementById("links_i_" + nav_show_hide_index).classList.remove("fa-caret-down");
                            document.getElementById("links_i_" + nav_show_hide_index).classList.add(nav_icons[nav_show_hide_index]);
                            document.getElementById("links_i_" + nav_show_hide_index).style.transform = "rotate(0deg)";

                            document.getElementById("label_i_" + nav_show_hide_index).style.display = "none";
                            document.getElementById("links_" + nav_show_hide_index).style.justifyContent = "center";

                            nav_show_hide_index++;
                        };



                    }
                }
            </script>

    <?
        }
    }



    class DBMain
    {


        public $conn;
        public $table;
        function __construct($database = 'ewg', $prefix = 'elegaysv')
        {
            $myfile = fopen($_SERVER['DOCUMENT_ROOT'] . "/WebBuilder/name.txt", "r") or die("Unable to open file!");
            $data = fread($myfile, filesize($_SERVER['DOCUMENT_ROOT'] . "/WebBuilder/name.txt"));
            $data_name = $data;
            fclose($myfile);

            $myfile = fopen("/home/elegaysv/quickstart_inv_files/$data_name.txt", "r") or die("Unable to open file!");
            $data = fread($myfile, filesize("/home/elegaysv/quickstart_inv_files/$data_name.txt"));

            $data_sniplits = explode(';', $data);
            $user = explode(':', $data_sniplits[1]);
            $pass = explode(':', $data_sniplits[2]);
            $db = explode(':', $data_sniplits[0]);
            fclose($myfile);

            $ip = 'ewg.dedicated.co.za';
            $user = $user[1];
            $pass = $pass[1];
            $db = $db[1];
            $this->conn = mysqli_connect($ip, $prefix . "_" . $user, $pass, $prefix . '_' . $db);
        }

        function insert($Query = '')
        {

            $this->conn->query($Query);

            return $this->conn->insert_id;
        }

        public function query(string $query): mysqli_result
        {
            $exec = $this->conn->query($query);

            if (!$exec) {
                throw new Exception($this->conn->error);
            }

            return $exec;
        }

        function CheckAccount($email)
        {
        }

        function Update($tableName, $columns = [], $values = [], $where = '1', $devmode = False)
        {

            $this->table = $tableName;

            if (count($columns) == count($values)) {


                $queryDatabase[] = "UPDATE $this->table SET ";
                $i = 0;
                foreach ($columns as $colls) {

                    $queryDatabaseCols[] = "`$colls` = '$values[$i]'";

                    $i++;
                }
                $queryDatabase[] = implode(',', $queryDatabaseCols);

                $queryDatabase[] = " WHERE $where";

                if ($devmode == True) {

                    echo implode('', $queryDatabase);
                } else {

                    // echo implode('',$queryDatabase);

                    return $this->conn->query(implode('', $queryDatabase));
                }
            } else {
                return "values and columns not same length";
            }
        }

        function exec_query($tableName, $columns = [], $joinType = '', $joinTable = '', $table1Column = '', $table2Column = '', $where = '1', $orderBy = "", $devMode = False)
        {

            $this->table = $tableName;

            if ($columns[0] == '*') {

                $results = "";
                $join = strlen($joinType) > 1 ? " a $joinType JOIN $joinTable b ON a.$table1Column = b.$table2Column " : '';


                $queryDatabase = "SELECT * FROM `$this->table` $join WHERE $where $orderBy";


                $results = $this->conn->query($queryDatabase);


                if (!$results)
                    var_dump($results);

                if ($devMode == True) {

                    echo $queryDatabase;
                } else {
                    return $results;
                }
            } else {
                $queryColumns = [];

                foreach ($columns as $col) {

                    $queryColumns[] = " $col ";
                }

                $queryColumns = implode(' , ', $queryColumns);

                $queryDatabase = "SELECT $queryColumns FROM `$this->table` WHERE $where $orderBy";


                $results = $this->conn->query($queryDatabase);


                if ($results->num_rows > 0) {

                    if ($devMode == True) {

                        echo $queryDatabase;
                    } else {
                        echo $queryDatabase;

                        // return $results;
                    }
                } else {

                    return "$queryDatabase";
                }
            }
        }

        function add_log($log_text)
        {
            if (strlen($log_text) < 1) {
                echo "PLEASE SUPPLY A LOG REASON";
            } else {
                $date = date('Y-m-d H:i', strtotime('+ 2 Hours'));
                self::insert("INSERT INTO `quickstart_logs` (`quickstart_users_id`,`log`,`date_time`) VALUES ({$_SESSION['user_id']},'$log_text','$date')");
            }
        }
    }
