package me.chanjar.weixin.cp.bean.oa.calendar;

import com.google.common.collect.ImmutableMap;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import me.chanjar.weixin.common.bean.ToJson;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;

import java.io.Serializable;
import java.util.List;

/**
 * 日历.
 *
 * @author <a href="https://github.com/binarywang">Binary Wang</a>
 * @date 2020-09-20
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class WxCpOaCalendar implements Serializable, ToJson {
  private static final long serialVersionUID = -817988838579546989L;

  /**
   * 变量名：cal_id
   * 是否必须：更新时必须提供
   * 描述：日历ID
   */
  @SerializedName("cal_id")
  private String calId;

  /**
   * 变量名：organizer
   * 是否必须：是
   * 描述：指定的组织者userid。注意该字段指定后不可更新
   */
  @SerializedName("organizer")
  private String organizer;

  /**
   * 变量名：readonly
   * 是否必须：否
   * 描述：日历组织者对日历是否只读权限（即不可编辑日历，不可在日历上添加日程，仅可作为组织者删除日历）。0-否；1-是。默认为1，即只读
   */
  @SerializedName("readonly")
  private Integer readonly;

  /**
   * 变量名：set_as_default
   * 是否必须：否
   * 描述：是否将该日历设置为组织者的默认日历。0-否；1-是。默认为0，即不设为默认日历
   */
  @SerializedName("set_as_default")
  private Integer setAsDefault;

  /**
   * 变量名：summary
   * 是否必须：是
   * 描述：日历标题。1 ~ 128 字符
   */
  @SerializedName("summary")
  private String summary;

  /**
   * 变量名：color
   * 是否必须：是
   * 描述：日历在终端上显示的颜色，RGB颜色编码16进制表示，例如：”#0000FF” 表示纯蓝色
   */
  @SerializedName("color")
  private String color;

  /**
   * 变量名：description
   * 是否必须：否
   * 描述：日历描述。0 ~ 512 字符
   */
  @SerializedName("description")
  private String description;

  /**
   * 变量名：shares
   * 是否必须：否
   * 描述：日历共享成员列表。最多2000人
   */
  @SerializedName("shares")
  private List<ShareInfo> shares;

  @Data
  @AllArgsConstructor
  public static class ShareInfo implements Serializable {
    private static final long serialVersionUID = -4882781114860754679L;

    /**
     * 日历共享成员的id
     */
    private String userid;

    /**
     * 共享成员对日历是否只读权限（即不可编辑日历，不可在日历上添加日程，仅可以退出日历）。
     * 0-否；1-是。默认为1，即只读
     */
    private Integer readonly;
  }

  @Override
  public String toJson() {
    return WxCpGsonBuilder.create().toJson(ImmutableMap.of("calendar", this));
  }
}
