package io.cattle.platform.iaas.api.auth.identity;

import io.cattle.platform.api.auth.Identity;
import io.cattle.platform.iaas.api.auth.SecurityConstants;
import io.cattle.platform.iaas.api.auth.AbstractTokenUtil;
import io.github.ibuildthecloud.gdapi.annotation.Field;
import io.github.ibuildthecloud.gdapi.annotation.Type;

import java.util.List;

@Type(name = AbstractTokenUtil.TOKEN)
public class Token {

    private  String jwt;
    private String code;
    private  String user;
    private Long authenticatedAsAccountId;
    private  Boolean security = SecurityConstants.SECURITY.get();
    private  String userType;
    private  String authProvider = SecurityConstants.AUTH_PROVIDER.get();
    private String originalLogin;

    private  String accountId;
    private  Identity userIdentity;
    private  boolean enabled = security;
    private  List<Identity> identities;
    private  String redirectUrl;

    public Token(String jwt, String accountId, Identity userIdentity, List<Identity> identities, String userType, Long authenticatedAsAccountId) {
        this.jwt = jwt;
        this.userIdentity = userIdentity;
        this.accountId = accountId;
        this.identities = identities;
        this.user = userIdentity.getLogin();
        this.userType = userType;
        this.setAuthenticatedAsAccountId(authenticatedAsAccountId);
    }

    public Token() {
    }

    @Field(nullable = true)
    public String getJwt() {
        return jwt;
    }

    @Field(nullable = true)
    public void setCode(String code) {
        this.code = code;
    }

    @Field(nullable = true)
    public String getUser() {
        return user;
    }

    @Field(nullable = true)
    public Boolean getSecurity() {
        return security;
    }

    @Field(nullable = true)
    public String getUserType() {
        return userType;
    }

    public void setUserType(String userType) {
        this.userType = userType;
    }

    @Field(nullable = true)
    public String getAccountId() {
        return accountId;
    }

    @Field(nullable = true, required = true)
    public String getCode() {
        return code;
    }

    @Field(nullable = true)
    public Identity getUserIdentity() {
        return userIdentity;
    }

    public void setUserIdentity(Identity user) {
        this.userIdentity = user;
    }

    @Field(nullable = true)
    public boolean isEnabled() {
        return enabled;
    }

    @Field(nullable = true)
    public Identity[] getIdentities() {
        return identities.toArray(new Identity[identities.size()]);
    }

    public void setIdentities(List<Identity> identities) {
        this.identities = identities;
    }

    @Field(nullable = true)
    public String getAuthProvider() {
        return authProvider;
    }

    public void setJwt(String jwt) {
        this.jwt = jwt;
    }

    @Field(nullable = true)
    public String getRedirectUrl() {
        return redirectUrl;
    }

    public void setRedirectUrl(String redirectUrl) {
        this.redirectUrl = redirectUrl;
    }

    public Long getAuthenticatedAsAccountId() {
        return authenticatedAsAccountId;
    }

    public void setAuthenticatedAsAccountId(Long authenticatedAsAccountId) {
        this.authenticatedAsAccountId = authenticatedAsAccountId;
    }

    public String getOriginalLogin() {
        return originalLogin;
    }

    public void setOriginalLogin(String originalLogin) {
        this.originalLogin = originalLogin;
    }
}
