package model

import (
	"golang.org/x/oauth2"
	"time"
)

// GDisk (Storage) - хранит информацию о пользователе Google и данных необходимых для хранилища.
// Пользователь может иметь несколько хранилищ GDisk.
// Email - уникальное поле и закрепляется только за одним пользователем
type GDisk struct {
	ID               string    `bson:"_id,omitempty" json:"id"`
	UserID           string    `bson:"user_id" json:"user_id"`
	Email            string    `bson:"email" json:"email"`               // Google email. Unique ?
	DisplayName      string    `bson:"display_name" json:"display_name"` // Отображаемое имя пользователя в Google
	PhotoLink        string    `bson:"photo_link" json:"photo_link"`     // Фото пользователя в Google
	AccessToken      string    `bson:"access_token" json:"-"`
	RefreshToken     string    `bson:"refresh_token" json:"-"`
	ExpiresIn        time.Time `bson:"expires_in" json:"-"`
	TokenType        string    `bson:"token_type" json:"-"`
	TemplateFolder   string    `bson:"template_folder" json:"template_folder"`
	TemplateFolderID string    `bson:"template_folder_id" json:"template_folder_id"`
	SaveFolder       string    `bson:"save_folder" json:"save_folder"`
	SaveFolderID     string    `bson:"save_folder_id" json:"save_folder_id"`
	IsDeleted        bool      `bson:"is_deleted" json:"is_deleted"`
	CreatedAt        time.Time `bson:"created_at" json:"created_at"`
	UpdatedAt        time.Time `bson:"updated_at" json:"updated_at"`
}

func (m *GDisk) Token() *oauth2.Token {
	token := &oauth2.Token{
		AccessToken:  m.AccessToken,
		TokenType:    m.TokenType,
		RefreshToken: m.RefreshToken,
		Expiry:       m.ExpiresIn,
	}

	return token
}
