package oauth

import "time"

var _ OAuthInfo = (*WechatOAuthInfo)(nil)

type WechatOAuthInfo struct {
	Scope        string `json:"scope,omitempty"`
	OpenID       string `json:"openid,omitempty"`
	UnionID      string `json:"unionid,omitempty"`
	AccessToken  string `json:"access_token,omitempty"`
	RefreshToken string `json:"refresh_token,omitempty"`
	ExpiresIn    int64  `json:"expires_in,omitempty"`
}

// GetAccessToken implements OAuthInfo.
func (w *WechatOAuthInfo) GetAccessToken() string {
	return w.AccessToken
}

// GetExpiredAt implements OAuthInfo.
func (w *WechatOAuthInfo) GetExpiredAt() time.Time {
	return time.Now().Add(time.Duration(w.ExpiresIn) * time.Second)
}

// GetOpenID implements OAuthInfo.
func (w *WechatOAuthInfo) GetOpenID() string {
	return w.OpenID
}

// GetRefreshToken implements OAuthInfo.
func (w *WechatOAuthInfo) GetRefreshToken() string {
	return w.RefreshToken
}

// GetUnionID implements OAuthInfo.
func (w *WechatOAuthInfo) GetUnionID() string {
	return w.UnionID
}
