package session

import (
	"net/http"
	"time"

	"github.com/gorilla/sessions"
)

type Options struct {
	Session   sessions.Options
	KeyPrefix string
	TTL       time.Duration
}

type OptionFunc func(opts *Options)

func NewOptions(funcs ...OptionFunc) *Options {
	opts := &Options{
		Session: sessions.Options{
			Path:     "/",
			Domain:   "",
			MaxAge:   int(time.Hour.Seconds()),
			HttpOnly: true,
			Secure:   false,
			SameSite: http.SameSiteDefaultMode,
		},
		KeyPrefix: "session:",
		TTL:       time.Hour,
	}

	for _, fn := range funcs {
		fn(opts)
	}

	return opts
}

func WithSessionOptions(options sessions.Options) OptionFunc {
	return func(opts *Options) {
		opts.Session = options
	}
}

func WithKeyPrefix(prefix string) OptionFunc {
	return func(opts *Options) {
		opts.KeyPrefix = prefix
	}
}

func WithTTL(ttl time.Duration) OptionFunc {
	return func(opts *Options) {
		opts.TTL = ttl
	}
}