package notify

import (
	"fmt"
	"time"
)

// budapest timezone for formatting.
var budapest *time.Location

func init() {
	var err error
	budapest, err = time.LoadLocation("Europe/Budapest")
	if err != nil {
		budapest = time.FixedZone("CET", 3600)
	}
}

// ──────────────────────────────────────────────────────────────────────
// Operator email — concise, English
// ──────────────────────────────────────────────────────────────────────

// FormatOperatorEmail returns (subject, textBody) for the operator channel.
func FormatOperatorEmail(customerID, eventType, severity, message, detailsJSON string) (string, string) {
	icon := "⚠️"
	if severity == "error" {
		icon = "🔴"
	}

	subject := fmt.Sprintf("[Felhom] %s %s: %s", icon, customerID, eventType)

	now := time.Now().In(budapest).Format("2006-01-02 15:04 MST")
	body := fmt.Sprintf(`Customer: %s
Event:    %s
Severity: %s
Time:     %s
Message:  %s`, customerID, eventType, severity, now, message)

	if detailsJSON != "" && detailsJSON != "{}" {
		body += fmt.Sprintf("\nDetails:  %s", detailsJSON)
	}

	body += fmt.Sprintf("\n\nDashboard: https://hub.felhom.eu/customers/%s", customerID)

	return subject, body
}

// ──────────────────────────────────────────────────────────────────────
// Customer email — Hungarian, friendly
// ──────────────────────────────────────────────────────────────────────

// customerMessages maps event_type → Hungarian customer message.
var customerMessages = map[string]string{
	// Backup events
	"backup_completed":          "A biztonsági mentés sikeresen elkészült.",
	"backup_failed":             "A biztonsági mentés sikertelen! Kérjük, ellenőrizd a rendszert.",
	"db_dump_completed":         "Az adatbázis mentés sikeresen elkészült.",
	"db_dump_failed":            "Az adatbázis mentés sikertelen!",
	"backup_integrity_ok":       "A mentés integritás ellenőrzés sikeres.",
	"backup_integrity_failed":   "A mentés integritás ellenőrzés hibát talált!",
	"crossdrive_completed":      "A másodlagos mentés sikeresen elkészült.",
	"crossdrive_failed":         "A másodlagos mentés sikertelen!",

	// Disk events
	"disk_warning":  "A lemezterület 90% felett van — kérjük, szabadíts fel helyet.",
	"disk_critical": "A lemezterület kritikusan magas (95%+) — azonnali beavatkozás szükséges!",

	// Storage events
	"storage_disconnected": "Egy meghajtó leválasztva — a mentések szünetelhetnek.",
	"storage_reconnected":  "A meghajtó újra csatlakoztatva.",

	// Staleness events (Hub-generated)
	"node_stale":     "A szerver nem küldött jelentést az elmúlt időszakban.",
	"node_down":      "A szerver nem elérhető!",
	"node_recovered": "A szerver újra elérhető.",

	// Health events
	"health_degraded":  "A rendszer állapota romlott.",
	"health_critical":  "A rendszer állapota kritikus!",
	"health_recovered": "A rendszer állapota helyreállt.",

	// Controller events
	"controller_started": "A vezérlő elindult.",
	"controller_updated": "A vezérlő frissítve lett.",

	// Deadline events (Hub-generated)
	"expected_backup_missed": "A mai biztonsági mentés nem készült el a határidőig!",
	"expected_dbdump_missed": "A mai adatbázis mentés nem készült el a határidőig!",

	// App lifecycle events
	"app_deployed": "Alkalmazás telepítve.",
	"app_removed":  "Alkalmazás eltávolítva.",

	// Disaster recovery events
	"disaster_recovery_started":   "Katasztrófa helyreállítás elindítva.",
	"disaster_recovery_completed": "Katasztrófa helyreállítás befejezve.",

	// Test
	"test": "Ez egy teszt értesítés.",
}

// severityLabels maps severity to Hungarian labels.
var severityLabels = map[string]string{
	"info":    "Információ",
	"warning": "Figyelmeztetés",
	"error":   "Hiba",
}

// FormatCustomerEmail returns (subject, textBody) for the customer channel.
func FormatCustomerEmail(customerID, eventType, severity, message, detailsJSON string) (string, string) {
	label := severityLabels[severity]
	if label == "" {
		label = severity
	}

	// Use the per-event-type Hungarian message if available, otherwise fall back to message
	hunMessage := customerMessages[eventType]
	if hunMessage == "" {
		hunMessage = message
	}

	subject := fmt.Sprintf("[Felhom] %s: %s", label, hunMessage)

	now := time.Now().In(budapest).Format("2006-01-02 15:04")
	body := fmt.Sprintf(`Kedves Ügyfél!

A Felhom rendszered a következő értesítést küldte:

%s

Részletek:
- Szerver: %s
- Időpont: %s
- Szint: %s
- Típus: %s`, hunMessage, customerID, now, label, eventType)

	if message != "" && message != hunMessage {
		body += fmt.Sprintf("\n- Üzenet: %s", message)
	}

	if detailsJSON != "" && detailsJSON != "{}" {
		body += fmt.Sprintf("\n- Megjegyzés: %s", detailsJSON)
	}

	body += `

Ha kérdésed van, vedd fel a kapcsolatot az üzemeltetővel.

Üdvözlettel,
Felhom.eu monitoring`

	return subject, body
}
