package cloudflare

import (
	"context"
	"time"

	"github.com/micro/go-micro/v2/store"
)

func getOption(ctx context.Context, key string) string {
	if ctx == nil {
		return ""
	}
	val, ok := ctx.Value(key).(string)
	if !ok {
		return ""
	}
	return val
}

func getToken(ctx context.Context) string {
	return getOption(ctx, "CF_API_TOKEN")
}

func getAccount(ctx context.Context) string {
	return getOption(ctx, "CF_ACCOUNT_ID")
}

// Token sets the cloudflare api token
func Token(t string) store.Option {
	return func(o *store.Options) {
		if o.Context == nil {
			o.Context = context.Background()
		}
		o.Context = context.WithValue(o.Context, "CF_API_TOKEN", t)
	}
}

// Account sets the cloudflare account id
func Account(id string) store.Option {
	return func(o *store.Options) {
		if o.Context == nil {
			o.Context = context.Background()
		}
		o.Context = context.WithValue(o.Context, "CF_ACCOUNT_ID", id)
	}
}

// Namespace sets the KV namespace
func Namespace(ns string) store.Option {
	return func(o *store.Options) {
		o.Namespace = ns
	}
}

// CacheTTL sets the timeout in nanoseconds of the read/write cache
func CacheTTL(ttl time.Duration) store.Option {
	return func(o *store.Options) {
		if o.Context == nil {
			o.Context = context.Background()
		}
		o.Context = context.WithValue(o.Context, "STORE_CACHE_TTL", ttl)
	}
}