<template>
  <div>
    <v-stepper :value="progress" class="mt-12" outlined max-width="800px">
      <v-stepper-header>
        <v-stepper-step step="1" :complete="steps.one">Setup</v-stepper-step>
        <v-divider />
        <v-stepper-step step="2" :complete="steps.two"
          >Extension Status</v-stepper-step
        >
        <v-divider />
        <v-stepper-step step="3" :complete="steps.three"
          >Server Connection</v-stepper-step
        >
        <v-divider />
        <v-stepper-step step="4" :complete="steps.four"
          >Browser Support</v-stepper-step
        >
        <v-divider />
        <v-stepper-step step="5" :complete="steps.five">Report</v-stepper-step>
      </v-stepper-header>

      <v-stepper-content step="1">
        <h1>Getting Ready...</h1>
        <v-progress-circular
          indeterminate
          size="50"
          width="5"
          color="primary"
        />
      </v-stepper-content>

      <v-stepper-content step="2">
        <h1>Ensuring the Extension is Running...</h1>
        <v-progress-circular
          indeterminate
          size="50"
          width="5"
          color="primary"
        />
      </v-stepper-content>

      <v-stepper-content step="3">
        <h1>Testing Server Connection...</h1>
        <v-progress-circular
          indeterminate
          size="50"
          width="5"
          color="primary"
        />
      </v-stepper-content>

      <v-stepper-content step="4">
        <h1>Checking Browser Information...</h1>
        <v-progress-circular
          indeterminate
          size="50"
          width="5"
          color="primary"
        />
      </v-stepper-content>

      <v-stepper-content step="5" style="text-align: left">
        <div class="reportHeader">
          <h1>Browser</h1>
          <v-divider style="transform: translateY(1.5em)" />
        </div>
        <v-alert
          dense
          outlined
          :type="notices.browser.type"
          v-text="notices.browser.text"
        />
        <span><b>BROWSER-</b> {{ userInformation.browser.name }}</span
        ><br />
        <span><b>VENDOR-</b> {{ userInformation.browser.vendor }} </span><br />
        <span><b>VERSION-</b> {{ userInformation.browser.version }}</span
        ><br />

        <div class="reportHeader">
          <h1>System</h1>
          <v-divider style="transform: translateY(1.5em)" />
        </div>
        <v-alert
          dense
          outlined
          :type="notices.system.type"
          v-text="notices.system.text"
        />
        <span><b>OS-</b> {{ userInformation.system.os }}</span
        ><br />
        <span><b>VERSION-</b> {{ userInformation.system.version }} </span><br />
        <span><b>TYPE-</b> {{ userInformation.system.type }}</span
        ><br />

        <div class="reportHeader">
          <h1>Extension</h1>
          <v-divider style="transform: translateY(1.5em)" />
        </div>
        <v-alert
          dense
          outlined
          :type="notices.extension.type"
          v-text="notices.extension.text"
        />
        <span
          ><b>LATEST EXTENSION VERSION-</b>
          {{
            userInformation.extension.latestExtensionVersion ||
            "Failed to lookup data"
          }}</span
        ><br />
        <span
          ><b>SERVER CONNECTION-</b>
          {{
            userInformation.extension.serverConnection
              ? "Working"
              : "Failed to connect"
          }}</span
        ><br />
      </v-stepper-content>
    </v-stepper>
  </div>
</template>

<script>
export default {
  data() {
    return {
      stepTime: 2500,
      supportedBrowsers: ["Firefox", "Chrome", "Brave", "Edge", "Opera"],

      progress: 1,
      steps: {
        one: false,
        two: false,
        three: false,
        four: false,
        five: false,
      },

      userInformation: {
        browser: {
          name: this.$ua._parsed.name,
          vendor: this.$ua._parsed.vendor,
          version: this.$ua._parsed.version,
        },
        system: {
          os: this.$ua._parsed.os,
          version: this.$ua._parsed.os_version,
          type: this.$ua._parsed.category,
        },
        extension: {
          serverConnection: null,
          latestExtensionVersion: null,
        },
      },

      notices: {
        system: {
          text: null,
          type: null,
        },
        browser: {
          text: null,
          type: null,
        },
        extension: {
          text: null,
          type: null,
        },
      },
    };
  },

  mounted() {
    //---   Init Stuff   ---//
    setTimeout(() => {
      this.$axios
        .$get(
          "https://raw.githubusercontent.com/Anarios/return-youtube-dislike/main/Extensions/combined/manifest-chrome.json"
        )
        .then((res) => {
          this.userInformation.extension.latestExtensionVersion = res.version;
        });

      this.progress++;
      this.steps.one = true;
    }, this.stepTime);

    //---   Check If Extension Is Running   ---//
    setTimeout(() => {
      this.progress++;
      this.steps.two = true;
    }, this.stepTime * 2);

    //---   Check Server Connection ---//
    setTimeout(() => {
      this.$axios
        .$get("https://returnyoutubedislikeapi.com/votes?videoId=QOFEgexls14")
        .then(() => {
          this.userInformation.extension.serverConnection = true;
        })
        .catch(() => {
          this.userInformation.extension.serverConnection = false;
        });

      this.progress++;
      this.steps.three = true;
    }, this.stepTime * 3);

    setTimeout(() => {
      this.progress++;
      this.steps.four = true;
      //this.steps.five = true;

      //---   Parse Extension Data   ---//
      this.notices.extension.text = `We are unable to automatically check that your extension is up to date. Please check that the number below matches your extension version.`;
      this.notices.extension.type = "warning";

      if (this.userInformation.extension.serverConnection != true) {
        this.notices.extension.text = `Failed to connect to the server!`;
        this.notices.extension.type = "error";
      }

      //---   Parse System Compatibility   ---//
      this.notices.system.text = `${this.userInformation.system.os} is supported!`;
      this.notices.system.type = "success";

      if (this.userInformation.system.type != "pc") {
        this.notices.system.text = `"${this.userInformation.system.type}" may not be a supported device type!`;
        this.notices.system.type = "warning";
      }

      //---   Parse Browser Compatibility   ---//
      this.notices.browser.text = `${this.userInformation.browser.name} ${this.userInformation.browser.version} is supported!`;
      this.notices.browser.type = "success";

      if (!this.supportedBrowsers.includes(this.userInformation.browser.name)) {
        this.notices.browser.text = `${this.userInformation.browser.name} is not a supported browser! You may continue to use the extension, but we don't provide official support.`;
        this.notices.browser.type = "warning";
      }
    }, this.stepTime * 4);
  },
};
</script>

<style scoped>
.reportHeader {
  display: flex;
  margin-top: 1em;
}
</style>
