package tmdb

import (
	"context"
	"errors"
	"net/http"
	"time"

	"github.com/tdvorak/seen/backend/internal/config"
)

var ErrTMDBAPIKeyMissing = errors.New("tmdb api key missing")

type Client struct {
	apiKey     string
	baseURL    string
	httpClient *http.Client
}

func NewClient(cfg config.TMDBConfig) *Client {
	return &Client{
		apiKey:  cfg.APIKey,
		baseURL: cfg.BaseURL,
		httpClient: &http.Client{
			Timeout: 10 * time.Second,
		},
	}
}

func (c *Client) Validate(ctx context.Context) error {
	if c.apiKey == "" {
		return ErrTMDBAPIKeyMissing
	}

	request, err := http.NewRequestWithContext(ctx, http.MethodGet, c.baseURL+"/configuration", nil)
	if err != nil {
		return err
	}

	query := request.URL.Query()
	query.Set("api_key", c.apiKey)
	request.URL.RawQuery = query.Encode()

	response, err := c.httpClient.Do(request)
	if err != nil {
		return err
	}
	defer response.Body.Close()

	if response.StatusCode >= 400 {
		return errors.New("tmdb validation request failed")
	}

	return nil
}
