import Component from "@ember/component";
import { action } from "@ember/object";
import { equal } from "@ember/object/computed";
import discourseComputed from "discourse-common/utils/decorators";
import I18n from "I18n";

export default Component.extend({
  isText: equal("value.type", "text"),
  isComposer: equal("value.type", "composer"),
  isDate: equal("value.type", "date"),
  isTime: equal("value.type", "time"),
  isDateTime: equal("value.type", "date_time"),
  isNumber: equal("value.type", "number"),
  isCheckbox: equal("value.type", "checkbox"),
  isUrl: equal("value.type", "url"),
  isUpload: equal("value.type", "upload"),
  isDropdown: equal("value.type", "dropdown"),
  isTag: equal("value.type", "tag"),
  isCategory: equal("value.type", "category"),
  isGroup: equal("value.type", "group"),
  isUser: equal("fieldName", "username"),
  isUserSelector: equal("value.type", "user_selector"),
  isSubmittedAt: equal("fieldName", "submitted_at"),
  isTextArea: equal("value.type", "textarea"),
  isComposerPreview: equal("value.type", "composer_preview"),
  textState: "text-collapsed",
  toggleText: I18n.t("admin.wizard.submissions.expand_text"),

  @discourseComputed("value")
  checkboxValue(value) {
    const isCheckbox = this.get("isCheckbox");
    if (isCheckbox) {
      if (value.value.includes("true")) {
        return true;
      } else if (value.value.includes("false")) {
        return false;
      }
    }
  },

  @action
  expandText() {
    const state = this.get("textState");

    if (state === "text-collapsed") {
      this.set("textState", "text-expanded");
      this.set("toggleText", I18n.t("admin.wizard.submissions.collapse_text"));
    } else if (state === "text-expanded") {
      this.set("textState", "text-collapsed");
      this.set("toggleText", I18n.t("admin.wizard.submissions.expand_text"));
    }
  },

  @discourseComputed("value")
  file(value) {
    const isUpload = this.get("isUpload");
    if (isUpload) {
      return value.value;
    }
  },

  @discourseComputed("value")
  submittedUsers(value) {
    const isUserSelector = this.get("isUserSelector");
    const users = [];

    if (isUserSelector) {
      const userData = value.value;
      const usernames = [];

      if (userData.indexOf(",")) {
        usernames.push(...userData.split(","));

        usernames.forEach((u) => {
          const user = {
            username: u,
            url: `/u/${u}`,
          };
          users.push(user);
        });
      }
    }
    return users;
  },

  @discourseComputed("value")
  userProfileUrl(value) {
    const isUser = this.get("isUser");

    if (isUser) {
      return `/u/${value.username}`;
    }
  },

  @discourseComputed("value")
  categoryUrl(value) {
    const isCategory = this.get("isCategory");

    if (isCategory) {
      return `/c/${value.value}`;
    }
  },

  @discourseComputed("value")
  groupUrl(value) {
    const isGroup = this.get("isGroup");

    if (isGroup) {
      return `/g/${value.value}`;
    }
  },
});