Tea.context(function () {
	this.step = "prepare"

	/**
	 * 选择平台用户
	 */
	this.platformUserId = 0

	this.changePlatformUser = function (platformUserId) {
		this.platformUserId = platformUserId
	}

	/**
	 * 准备工作
	 */
	this.authType = "http"
	this.users = []

	this.doPrepare = function () {
		this.step = "user"

		this.$post(".userOptions")
			.params({
				platformUserId: this.platformUserId
			})
			.success(function (resp) {
				this.users = resp.data.users
			})
	}

	this.prepareMoreOptionsVisible = false
	this.authURL = ""
	this.showPrepareMoreOptionsVisible = function () {
		this.prepareMoreOptionsVisible = !this.prepareMoreOptionsVisible
	}

	/**
	 * 选择ACME用户
	 */
	this.userId = 0

	this.goPrepare = function () {
		this.step = "prepare"
	}

	this.createUser = function () {
		let that = this
		teaweb.popup("/servers/certs/acme/users/createPopup?providerCode=" + this.providerCode + "&platformUserId=" + this.platformUserId, {
			title: '创建ACME用户',
			height: "30em",
			width: "44em",
			callback: function (resp) {
				teaweb.successToast("创建成功")

				let acmeUser = resp.data.acmeUser
				let description = acmeUser.description
				if (description.length > 0) {
					description = "（" + description + "）"
				}
				that.userId = acmeUser.id
				that.users.unshift({
					id: acmeUser.id,
					description: description,
					email: acmeUser.email,
					providerCode: acmeUser.providerCode
				})
			}
		})
	}

	this.providerCode = ""
	this.changeProvider = function () {
		this.userId = 0
	}

	this.doUser = function () {
		if (this.providerCode.length == 0) {
			teaweb.warn("请选择一个证书服务商")
			return
		}
		if (this.userId == 0) {
			teaweb.warn("请选择一个申请证书的用户")
			return
		}
		this.step = "dns"
	}

	/**
	 * 设置DNS解析
	 */
	this.dnsProviderId = 0
	this.dnsDomain = ""
	this.autoRenew = true
	this.domains = []
	this.taskId = 0
	this.isRequesting = false

	this.goUser = function () {
		this.step = "user"
	}

	this.changeDomains = function (v) {
		this.domains = v
	}

	this.doDNS = function () {
		this.isRequesting = true
		let that = this
		let taskCreated = false
		this.$post("$")
			.params({
				platformUserId: this.platformUserId,
				authType: this.authType,
				acmeUserId: this.userId,
				dnsProviderId: this.dnsProviderId,
				dnsDomain: this.dnsDomain,
				domains: this.domains,
				autoRenew: this.autoRenew ? 1 : 0,
				taskId: this.taskId,
				authURL: this.authURL
			})
			.success(function (resp) {
				this.taskId = resp.data.taskId
				taskCreated = true

				this.isRequesting = true
				this.$post(".run")
					.timeout(300)
					.params({
						taskId: this.taskId
					})
					.success(function (resp) {
						that.certId = resp.data.certId
						that.step = "finish"
					})
					.done(function () {
						that.isRequesting = false
					})
			})
			.done(function () {
				if (!taskCreated) {
					this.isRequesting = false
				}
			})
	}

	/**
	 * 完成
	 */
	this.certId = 0

	this.goDNS = function () {
		this.step = "dns"
	}

	this.doFinish = function () {
		window.location = "/servers/certs/acme"
	}

	this.viewCert = function () {
		teaweb.popup("/servers/certs/certPopup?certId=" + this.certId, {
			title: '证书详情',
			height: "28em",
			width: "48em"
		})
	}
})