package com.tashow.cloud.system.controller.admin.auth.vo;

import cn.hutool.core.util.StrUtil;
import com.tashow.cloud.common.validation.InEnum;
import com.tashow.cloud.systemapi.enums.social.SocialTypeEnum;
import jakarta.validation.constraints.AssertTrue;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;

/** 管理后台 - 账号密码登录 Request VO，如果登录并绑定社交用户，需要传递 social 开头的参数 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AuthLoginReqVO extends CaptchaVerificationReqVO {

  /** 账号" */
  @NotEmpty(message = "登录账号不能为空")
  @Length(min = 4, max = 16, message = "账号长度为 4-16 位")
  @Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母")
  private String username;

  /** 密码" */
  @NotEmpty(message = "密码不能为空")
  @Length(min = 4, max = 16, message = "密码长度为 4-16 位")
  private String password;

  // ========== 绑定社交登录时，需要传递如下参数 ==========

  /** 社交平台的类型，参见 SocialTypeEnum 枚举值" */
  @InEnum(SocialTypeEnum.class)
  private Integer socialType;

  /** 授权码" */
  private String socialCode;

  /** state" */
  private String socialState;

  @AssertTrue(message = "授权码不能为空")
  public boolean isSocialCodeValid() {
    return socialType == null || StrUtil.isNotEmpty(socialCode);
  }

  @AssertTrue(message = "授权 state 不能为空")
  public boolean isSocialState() {
    return socialType == null || StrUtil.isNotEmpty(socialState);
  }
}
