import { respath } from "../constants/respath"
import { ResourceManager } from "../models/ResourceManager"
import { UIManager } from "../models/UIManager"
import { Utility_EaseOut, Utility_EaseOut_2 } from "../utils/utility"

const { regClass, property } = Laya

export function G_ShowCommonTips(title: string, content: string, showToggle: boolean, func: any): void {
  ResourceManager.getInstance().loadPrefab(respath.common_tips_ui_res, (go: any) => {
    const prefab = go.create()
    const obj = UIManager.getInstance().getUIRoot().addChild(prefab).getComponent(CommonTips)
    obj.showCommonTips(title, content, showToggle, func)
  })
}

@regClass()
export class CommonTips extends Laya.Script {
  declare owner: Laya.Box

  @property(Laya.Label)
  public label_title: Laya.Label

  @property(Laya.Label)
  public label_content: Laya.Label

  @property(Laya.Box)
  public btn_ok: Laya.Box

  @property(Laya.Box)
  public btn_cancel: Laya.Box

  @property(Laya.Box)
  public toggle: Laya.Box

  @property(Laya.Image)
  public check: Laya.Image

  private isChecked = false

  private mask: Laya.Image
  private center: Laya.Box

  onAwake(): void {
    this.mask = this.owner.getChildByName("Image") as Laya.Image
    this.mask.alpha = 0
    Laya.Tween.to(this.mask, { alpha: 0.6 }, 400, Utility_EaseOut)

    this.center = this.owner.getChildByName("center") as Laya.Box
    this.center.scaleX = 0.8
    this.center.scaleY = 0.8
    Laya.Tween.to(this.center, { scaleX: 1, scaleY: 1 }, 400, Utility_EaseOut)
    this.center.alpha = 0
    Laya.Tween.to(this.center, { alpha: 1 }, 400, Utility_EaseOut)
  }

  destroyUI(): void {
    Laya.Tween.to(this.mask, { alpha: 0 }, 400, Utility_EaseOut_2)
    Laya.Tween.to(this.center, { scaleX: 0.8, scaleY: 0.8 }, 400, Utility_EaseOut_2)
    Laya.Tween.to(this.center, { alpha: 0 }, 400, Utility_EaseOut_2, Laya.Handler.create(this, () => {
      this.owner.destroy()
    }))
  }

  public showCommonTips(title: string, content: string, showToggle: boolean, func: any): void {
    this.label_title.text = title
    this.label_content.text = content
    this.toggle.visible = showToggle
    this.check.visible = false
    this.toggle.on(Laya.Event.CLICK, this, () => {
      this.isChecked = !this.isChecked
      this.check.visible = this.isChecked
    })

    this.btn_ok.on(Laya.Event.CLICK, this, () => {
      if (func) {
        func(true, this.isChecked)
      }
      this.destroyUI()
    })
    this.btn_cancel.on(Laya.Event.CLICK, this, () => {
      if (func) {
        func(false, this.isChecked)
      }
      this.destroyUI()
    })
    this.mask.on(Laya.Event.CLICK, this, () => {
      this.destroyUI()
    })
  }
}
