package schema

import (
	"time"

	"entgo.io/ent"
	"entgo.io/ent/schema/field"
	"entgo.io/ent/schema/index"
)

// RefreshToken holds the schema definition for the RefreshToken entity.
type RefreshToken struct {
	ent.Schema
}

// Fields of the RefreshToken.
func (RefreshToken) Fields() []ent.Field {
	return []ent.Field{
		field.String("id").
			Unique().
			Immutable(),
		field.String("user_id").
			NotEmpty().
			Comment("ID of the user who owns this refresh token"),
		field.String("token_hash").
			NotEmpty().
			Sensitive().
			Comment("SHA256 hash of the refresh token"),
		field.Time("expires_at").
			Comment("When the refresh token expires"),
		field.Time("created_at").
			Default(time.Now).
			Immutable(),
	}
}

// Indexes of the RefreshToken.
func (RefreshToken) Indexes() []ent.Index {
	return []ent.Index{
		index.Fields("user_id"),
		index.Fields("token_hash"),
		index.Fields("expires_at"),
	}
}
