<!doctype html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>yuzu Installer</title>

    <link rel="stylesheet" href="/css/bulma.css" type="text/css">
    <link rel="stylesheet" href="/css/main.css" type="text/css">
</head>
<body>
    <div id="app">
        <nav class="navbar is-dark" role="navigation" aria-label="main navigation">
            <div class="navbar-brand">
            <span class="navbar-item">
                <img src="/img/logo.png" v-bind:alt="config.general.name">
            </span>
            </div>
        </nav>

        <!-- Main content -->
        <section class="section">
            <div class="container">
                <div class="columns">
                    <div class="column is-one-third">
                        <h1 class="title">
                            Welcome to the {{ config.general.name }} installer!
                        </h1>
                        <h2 class="subtitle">
                            We will have you up and running in just a few moments.
                        </h2>
                    </div>

                    <div class="column" v-if="has_error">
                        <h4 class="subtitle">An error occurred:</h4>

                        <code>{{ error }}</code>


                        <a class="button is-primary is-pulled-right" v-on:click="back_to_packages">Back</a>
                    </div>

                    <div class="column" v-else-if="modify_install">
                        <h4 class="subtitle">Choose an option:</h4>

                        <div class="field is-grouped">
                            <p class="control">
                                <a class="button is-link" v-on:click="exit">
                                    Update
                                </a>
                            </p>
                            <p class="control">
                                <a class="button" v-on:click="exit">
                                    Modify
                                </a>
                            </p>
                            <p class="control">
                                <a class="button is-danger" v-on:click="confirm_uninstall">
                                    Uninstall
                                </a>
                            </p>
                        </div>
                    </div>

                    <div class="column" v-else-if="select_packages">
                        <h4 class="subtitle">Select your preferred settings:</h4>

                        <!-- Build options -->
                        <div class="tile is-ancestor">
                            <div class="tile is-parent" v-for="package in config.packages" :index="package.name">
                                <div class="tile is-child">
                                    <div class="box">
                                        <label class="checkbox">
                                            <input type="checkbox" v-model="package.default" />
                                            {{ package.name }}
                                        </label>
                                        <p>
                                            {{ package.description }}
                                        </p>
                                    </div>
                                </div>
                            </div>
                        </div>

                        <div class="subtitle is-6">Install Location</div>
                        <div class="field has-addons">
                            <div class="control is-expanded">
                                <input class="input" type="text" v-model="install_location"
                                       placeholder="Enter a install path here">
                            </div>
                            <div class="control">
                                <a class="button is-info" v-on:click="select_file">
                                    Select
                                </a>
                            </div>
                        </div>

                        <a class="button is-primary is-pulled-right" v-on:click="install">Install!</a>
                    </div>

                    <div class="column" v-else-if="is_installing">
                        <h4 class="subtitle">Installing...</h4>
                        <div v-html="config.general.installing_message"></div>
                        <br />

                        <div v-html="progress_message"></div>
                        <progress class="progress is-info is-medium" v-bind:value="progress" max="100">
                            {{ progress }}%
                        </progress>
                    </div>

                    <div class="column" v-else-if="is_finished">
                        <h4 class="subtitle">Thanks for installing {{ config.general.name }}!</h4>

                        <a class="button is-primary is-pulled-right" v-on:click="exit">Exit</a>
                    </div>

                    <div class="column" v-else>
                        <h4 class="subtitle">Oh no!</h4>
                        <div>A error occured during installation. Please retry!</div>
                    </div>
                </div>
            </div>
        </section>

        <div class="modal is-active" v-if="confirm_uninstall">
            <div class="modal-background"></div>
            <div class="modal-card">
                <header class="modal-card-head">
                    <p class="modal-card-title">Are you sure you want to uninstall {{ config.general.name }}?</p>
                </header>
                <footer class="modal-card-foot">
                    <button class="button is-danger">Yes</button>
                    <button class="button" v-on:click="cancel_uninstall">No</button>
                </footer>
            </div>
        </div>
    </div>

    <script src="/api/config"></script>
    <script src="/js/helpers.js"></script>
    <script src="/js/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                config : config,
                install_location : "",
                modify_install : false,
                select_packages : true,
                is_installing : false,
                is_finished : false,
                confirm_uninstall : false,
                progress : 0,
                progress_message : "",
                has_error : false,
                error : "",
                metadata : {
                    database : [],
                    install_path : "",
                    preexisting_install : false
                }
            },
            methods: {
                "select_file": function() {
                    ajax("/api/file-select", function(e) {
                        if (e.path != null) {
                            app.install_location = e.path;
                        }
                    });
                },
                "install": function() {
                    this.select_packages = false;
                    this.is_installing = true;

                    var results = {};

                    console.log("Packages: " + this.config.packages);

                    for (var package_index = 0; package_index < this.config.packages.length; package_index++) {
                        var current_package = this.config.packages[package_index];
                        if (current_package.default != null) {
                            results[current_package.name] = current_package.default;
                        }
                    }
                    console.log("Results: " + results);

                    results["path"] = this.install_location;

                    stream_ajax("/api/start-install", function(line) {
                        if (line.hasOwnProperty("Status")) {
                            app.progress_message = line.Status[0];
                            app.progress = line.Status[1] * 100;
                        }

                        if (line.hasOwnProperty("Error")) {
                            app.is_installing = false;
                            app.has_error = true;
                            app.error = line.Error;
                        }
                    }, function(e) {
                        app.is_installing = false;
                        app.is_finished = true;
                    }, undefined, results);
                },
                "back_to_packages": function() {
                    app.select_packages = true;
                    app.has_error = false;
                    app.is_installing = false;
                    app.is_finished = false;
                },
                "confirm_uninstall": function() {
                    app.confirm_uninstall = true;
                },
                "cancel_uninstall": function() {
                    app.confirm_uninstall = false;
                },
                "exit": function() {
                    ajax("/api/exit", function() {});
                }
            }
        });

        ajax("/api/installation-status", function(e) {
            app.metadata = e;
            if (e.preexisting_install) {
                app.modify_install = true;
                app.select_packages = false;
                app.install_location = e.install_path;
            } else {
                ajax("/api/default-path", function(e) {
                    if (e.path != null) {
                        app.install_location = e.path;
                    }
                });
            }
        });
    </script>
</body>
</html>