package services

import (
	"testing"

	"github.com/sujit-baniya/fiber-boilerplate/app"
	"github.com/sujit-baniya/fiber-boilerplate/config"
)

func TestGetAppURLLocalhostAddsPort(t *testing.T) {
	app.Http = &config.AppConfig{
		Server: config.ServerConfig{
			Url:  "http://localhost",
			Port: "8084",
		},
	}
	if got := getAppURL(); got != "http://localhost:8084" {
		t.Fatalf("getAppURL() = %q, want http://localhost:8084", got)
	}
}

func TestGetPublicURLPrefersPublicURL(t *testing.T) {
	app.Http = &config.AppConfig{
		Server: config.ServerConfig{
			Url:       "http://localhost:8080",
			PublicUrl: "admin.u-site.app",
			Port:      "8080",
		},
	}
	if got := getPublicURL(); got != "https://admin.u-site.app" {
		t.Fatalf("getPublicURL() = %q, want https://admin.u-site.app", got)
	}
}

func TestAbsAppURLUsesPublicURL(t *testing.T) {
	app.Http = &config.AppConfig{
		Server: config.ServerConfig{
			Url:       "http://localhost:8080",
			PublicUrl: "https://admin.u-site.app",
			Port:      "8080",
		},
	}
	got := absAppURL("/portal/proyecto/bot?tab=Tickets&ticket=1")
	want := "https://admin.u-site.app/portal/proyecto/bot?tab=Tickets&ticket=1"
	if got != want {
		t.Fatalf("absAppURL() = %q, want %q", got, want)
	}
}

func TestAbsAppURLFallsBackToAppURL(t *testing.T) {
	app.Http = &config.AppConfig{
		Server: config.ServerConfig{
			Url:  "http://localhost",
			Port: "8084",
		},
	}
	got := absAppURL("/app/tickets?ticket=3")
	want := "http://localhost:8084/app/tickets?ticket=3"
	if got != want {
		t.Fatalf("absAppURL() = %q, want %q", got, want)
	}
}

func TestTelegramHTMLLinkEscapesAmpersand(t *testing.T) {
	link := telegramHTMLLink("https://admin.u-site.app/portal/p?tab=Tickets&ticket=1", "Ver portal")
	if link != `<a href="https://admin.u-site.app/portal/p?tab=Tickets&amp;ticket=1">Ver portal</a>` {
		t.Fatalf("telegramHTMLLink() = %q", link)
	}
}
