package scryfall

import (
	"net/http"
	"time"
)

const SCRYFALL_API_URL string = "https://api.scryfall.com/"

type ScryfallClient struct {
	baseURL    string
	httpClient *http.Client
}
type ScryfallClientOption func(*ScryfallClient) error

func NewScryfallClient(options ...ScryfallClientOption) (*ScryfallClient, error) {
	client := &ScryfallClient{
		baseURL: SCRYFALL_API_URL,
		httpClient: &http.Client{
			Timeout: time.Second * 30,
		},
	}

	if err := client.parseOptions(options...); err != nil {
		return nil, err
	}

	return client, nil
}

func BaseURL(baseURL string) ScryfallClientOption {
	return func(c *ScryfallClient) error {
		c.baseURL = baseURL
		return nil
	}
}

func (c *ScryfallClient) parseOptions(options ...ScryfallClientOption) error {
	for _, option := range options {
		err := option(c)
		if err != nil {
			return err
		}
	}

	return nil
}