// kafka — a privacy-respecting metasearch engine
// Copyright (C) 2026-present metamorphosis-dev
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.

package engines

import (
	"net/http"
	"os"
	"time"

	"github.com/metamorphosis-dev/kafka/internal/config"
)

// NewDefaultPortedEngines returns the Go-native engine registry.
// If cfg is nil, API keys fall back to environment variables.
func NewDefaultPortedEngines(client *http.Client, cfg *config.Config) map[string]Engine {
	if client == nil {
		client = &http.Client{Timeout: 10 * time.Second}
	}

	var braveAPIKey, braveAccessToken, youtubeAPIKey string
	if cfg != nil {
		braveAPIKey = cfg.Engines.Brave.APIKey
		braveAccessToken = cfg.Engines.Brave.AccessToken
		youtubeAPIKey = cfg.Engines.YouTube.APIKey
	}
	if braveAPIKey == "" {
		braveAPIKey = os.Getenv("BRAVE_API_KEY")
	}
	if braveAccessToken == "" {
		braveAccessToken = os.Getenv("BRAVE_ACCESS_TOKEN")
	}
	if youtubeAPIKey == "" {
		youtubeAPIKey = os.Getenv("YOUTUBE_API_KEY")
	}

	return map[string]Engine{
		"wikipedia": &WikipediaEngine{client: client},
		"arxiv":     &ArxivEngine{client: client},
		"crossref":  &CrossrefEngine{client: client},
		"braveapi": &BraveAPIEngine{
			client:          client,
			apiKey:          braveAPIKey,
			accessGateToken: braveAccessToken,
			resultsPerPage: 20,
		},
		"brave": &BraveEngine{client: client},
		"qwant": &QwantEngine{
			client:         client,
			category:       "web-lite",
			resultsPerPage: 10,
		},
		"duckduckgo": &DuckDuckGoEngine{client: client},
		"github":     &GitHubEngine{client: client},
		"reddit":     &RedditEngine{client: client},
		"bing":   &BingEngine{client: client},
		"google":  &GoogleEngine{client: client},
		"youtube": &YouTubeEngine{
			client:  client,
			apiKey:  youtubeAPIKey,
			baseURL: "https://www.googleapis.com",
		},
		// Image engines
		"bing_images":  &BingImagesEngine{client: client},
		"ddg_images":   &DuckDuckGoImagesEngine{client: client},
		"qwant_images": &QwantImagesEngine{client: client},
	}
}
