import { Component, Input, OnInit } from "@angular/core";

import { MasterPasswordPolicyOptions } from "@bitwarden/common/admin-console/models/domain/master-password-policy-options";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";

@Component({
  selector: "app-callout",
  templateUrl: "callout.component.html",
})
export class CalloutComponent implements OnInit {
  @Input() type = "info";
  @Input() icon: string;
  @Input() title: string;
  @Input() clickable: boolean;
  @Input() enforcedPolicyOptions: MasterPasswordPolicyOptions;
  @Input() enforcedPolicyMessage: string;
  @Input() useAlertRole = false;

  calloutStyle: string;

  constructor(private i18nService: I18nService) {}

  ngOnInit() {
    this.calloutStyle = this.type;

    if (this.enforcedPolicyMessage === undefined) {
      this.enforcedPolicyMessage = this.i18nService.t("masterPasswordPolicyInEffect");
    }

    if (this.type === "warning" || this.type === "danger") {
      if (this.type === "danger") {
        this.calloutStyle = "danger";
      }
      if (this.title === undefined) {
        this.title = this.i18nService.t("warning");
      }
      if (this.icon === undefined) {
        this.icon = "bwi-exclamation-triangle";
      }
    } else if (this.type === "error") {
      this.calloutStyle = "danger";
      if (this.title === undefined) {
        this.title = this.i18nService.t("error");
      }
      if (this.icon === undefined) {
        this.icon = "bwi-error";
      }
    } else if (this.type === "tip") {
      this.calloutStyle = "success";
      if (this.title === undefined) {
        this.title = this.i18nService.t("tip");
      }
      if (this.icon === undefined) {
        this.icon = "bwi-lightbulb";
      }
    }
  }

  getPasswordScoreAlertDisplay() {
    if (this.enforcedPolicyOptions == null) {
      return "";
    }

    let str: string;
    switch (this.enforcedPolicyOptions.minComplexity) {
      case 4:
        str = this.i18nService.t("strong");
        break;
      case 3:
        str = this.i18nService.t("good");
        break;
      default:
        str = this.i18nService.t("weak");
        break;
    }
    return str + " (" + this.enforcedPolicyOptions.minComplexity + ")";
  }
}
