package com.cyksj.model.dto;

import com.cyksj.common.util.Jsons;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import lombok.experimental.Accessors;

import java.io.Serializable;


/**
 * @author chan
 * @date 2022-10-09 10:31 AM
 */
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
@Accessors(chain = true)
public class WxMpTemplateMessage implements Serializable {
	private static final long serialVersionUID = 5063374783759519418L;

	public WxMpTemplateMessage() {
		this.data = new TemplateData();
	}

	/**
	 * 接收者openid.
	 */
	@JsonProperty("touser")
	private String toUser;

	/**
	 * 模板ID.
	 */
	@JsonProperty("template_id")
	private String templateId;

	/**
	 * 模板跳转链接.
	 * <pre>
	 * url和miniprogram都是非必填字段，若都不传则模板无跳转；若都传，会优先跳转至小程序。
	 * 开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时，将会跳转至url。
	 * </pre>
	 */
	private String url;

	/**
	 * 跳小程序所需数据，不需跳小程序可不用传该数据.
	 *
	 * @see #url
	 */
	@JsonProperty("miniprogram")
	private MiniProgram miniProgram;

	/**
	 * 模板数据.
	 */
	private TemplateData data;

	@Getter
	@Setter
	public static class TemplateData {
		/**
		 * 标题
		 */
		private WxMpTemplateData first;

		/**
		 * 关键词1
		 */
		private WxMpTemplateData keyword1;
		/**
		 * 2
		 */
		private WxMpTemplateData keyword2;
		/**
		 * 关键词3
		 */
		private WxMpTemplateData keyword3;
		/**
		 * 关键词4
		 */
		private WxMpTemplateData keyword4;
		/**
		 * 关键词WxMpTemplateData
		 */
		private WxMpTemplateData keyword5;
		/**
		 * remark
		 */
		private WxMpTemplateData remark;

		/**
		 * 登录时间
		 */
		private WxMpTemplateData time3;

		/**
		 * 用户名thing17
		 */
		private WxMpTemplateData thing17;
	}

	public String toJson() throws Exception {
		return Jsons.toJson(this);
	}

	@Data
	@NoArgsConstructor
	@AllArgsConstructor
	@JsonInclude(JsonInclude.Include.NON_NULL)
	public static class MiniProgram implements Serializable {
		private static final long serialVersionUID = -7945254706501974849L;

		private String appid;

		@JsonProperty("pagepath")
		private String pagePath;

		/**
		 * 是否使用path，否则使用pagepath.
		 * 加入此字段是基于微信官方接口变化多端的考虑
		 */
		private boolean usePath = false;
	}

}
