package domain

import (
	"image"
	"net/url"
	"path"
	"path/filepath"
	"testing"
	"time"
)

type Site struct {
	DefaultLanguage Language
	Language        Language
	Languages       []Language
	BaseURL         *url.URL
	Params          map[string]any
	TimeZone        *time.Location
	File            Path
	Title           string
	Resources       Resources
}

func (s Site) LanguagePrefix() string {
	if s.Language != LanguageUnd {
		return path.Join("/", s.Language.lang, "/")
	}

	return ""
}

func (s Site) IsMultiLingual() bool {
	return 1 < len(s.Languages)
}

func TestSite(tb testing.TB) *Site {
	tb.Helper()

	ru := NewLanguage("ru")
	en := NewLanguage("en")

	return &Site{
		DefaultLanguage: en,
		Language:        ru,
		Languages:       []Language{en, ru},
		BaseURL:         &url.URL{Scheme: "https", Host: "test.web.site", Path: "/"},
		TimeZone:        time.UTC,
		File:            NewPath(filepath.Join("content", "index.en.md")),
		Title:           "Testing",
		Resources: []*Resource{
			{
				modTime:      time.Now().UTC().Add(-1 * time.Hour),
				params:       make(map[string]any),
				File:         NewPath("photo.png"),
				mediaType:    NewMediaType("image/png"),
				key:          "photo",
				name:         "photo",
				resourceType: ResourceTypeImage,
				title:        "",
				image:        image.Config{},
			},
			{
				modTime:      time.Now().UTC().Add(-2 * time.Hour),
				params:       make(map[string]any),
				File:         NewPath("logo.jpg"),
				mediaType:    NewMediaType("image/jpeg"),
				key:          "logo",
				name:         "logo",
				resourceType: ResourceTypeImage,
				title:        "",
				image:        image.Config{},
			},
		},
		Params: map[string]any{
			"server": map[string]any{
				"headers": []any{map[string]any{
					"path": "/**",
					"values": map[string]any{
						"Link": `<https://test.auth.app/>; rel="indieauth-metadata", ` +
							`<https://test.pub.app/>; rel="micropub"`,
						"X-Koroko": "Ya-ha-ha!",
					},
				}, map[string]any{
					"path": "/foo/bar",
					"values": map[string]any{
						"X-Testing": `sample-text`,
					},
				}},
				"redirects": []any{map[string]any{
					"from":   "/foo/bar",
					"to":     "/bar/foo",
					"status": 302,
				}, map[string]any{
					"from":   "/foo",
					"to":     "https://test.redirect.site/",
					"status": 301,
					"force":  true,
				}},
			},
		},
	}
}
