package userbehavior

import (
	"context"
	"time"

	"github.com/tidbcloud/devops/entity/event"
	ubent "github.com/tidbcloud/devops/entity/userbehavior"
	evbus "github.com/tidbcloud/eventbus-datastruct/event"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("startupUBEvent", func() {
	It("builds a queued GTM email custom card", func() {
		tenantName := "Acme"
		bizRegion := "na"
		displayRegion := "LATAM"

		ev := &startupUBEvent{
			TenantEvent: event.TenantEvent{
				OrgId: 123,
			},
			tenantName:    &tenantName,
			bizRegion:     &bizRegion,
			displayRegion: &displayRegion,
			emailDomain:   "acme.com",
			extraInfo:     "",
			gtmLead:       &ubent.GTMLead{Email: "founder@acme.com"},
			gtmSentEmail: &ubent.GTMSentEmail{
				ToAddress:      "founder@acme.com",
				Subject:        "Hello",
				UseCaseProfile: "ai-llm-platform",
				ScheduledAt:    time.Date(2026, 1, 15, 16, 0, 0, 0, time.UTC),
				Status:         "queued",
			},
		}

		card, err := ev.BuildCustomCard(context.Background())
		Expect(err).ToNot(HaveOccurred())
		Expect(card).ToNot(BeNil())

		s, err := card.String()
		Expect(err).ToNot(HaveOccurred())
		Expect(s).To(ContainSubstring("AI GTM Email Queued"))
		Expect(s).To(ContainSubstring("[** LATAM **]"))
		Expect(s).To(ContainSubstring("Scheduled"))
		Expect(s).To(ContainSubstring("2026-01-15T09:00:00-07:00"))
		Expect(s).ToNot(ContainSubstring("AI GTM Email Sent"))
	})

	It("uses the business region when there is no display override", func() {
		tenantName := "Acme"
		bizRegion := "NA"
		ev := &startupUBEvent{
			TenantEvent: event.TenantEvent{
				OrgId: 123,
			},
			tenantName:  &tenantName,
			bizRegion:   &bizRegion,
			emailDomain: "acme.com",
		}

		Expect(ev.DefaultText(context.Background())).To(ContainSubstring("[** NA **]"))
	})

	It("sets LATAM display region from headquarters country code", func() {
		bizRegion := "NA"
		ev := &startupUBEvent{
			bizRegion: &bizRegion,
			extraInfo: `{
				"company_name": "Acme LATAM",
				"headquarter": "Mexico City, Mexico",
				"headquarter_country_code": "MX",
				"ai_confidence_level": "high"
			}`,
		}

		ev.applyHeadquarterDisplayRegion()
		Expect(ev.startupDisplayRegion()).To(Equal("LATAM"))
	})

	It("sets EMEA display region from headquarters country code", func() {
		bizRegion := "NA"
		ev := &startupUBEvent{
			bizRegion: &bizRegion,
			extraInfo: `{
				"company_name": "Acme EMEA",
				"headquarter": "Berlin, Germany",
				"headquarter_country_code": "DE",
				"ai_confidence_level": "high"
			}`,
		}

		ev.applyHeadquarterDisplayRegion()
		Expect(ev.startupDisplayRegion()).To(Equal("EMEA"))
	})
})

var _ = Describe("startupImportUBEvent", func() {
	It("describes succeeded imports as finished", func() {
		tenantName := "Acme"
		bizRegion := "na"
		ev := &startupImportUBEvent{
			originEv: &evbus.DisplayEvent{
				DisplayStatus: evbus.EventStatusSucceeded,
			},
			tenantName:  &tenantName,
			bizRegion:   &bizRegion,
			tenantID:    123,
			clusterID:   456,
			emailDomain: "acme.com",
		}

		Expect(ev.DefaultText(context.Background())).To(ContainSubstring("finished an import"))
	})

	It("describes failed imports as failed", func() {
		tenantName := "Acme"
		bizRegion := "na"
		ev := &startupImportUBEvent{
			originEv: &evbus.DisplayEvent{
				DisplayStatus: evbus.EventStatusFailed,
			},
			tenantName:  &tenantName,
			bizRegion:   &bizRegion,
			tenantID:    123,
			clusterID:   456,
			emailDomain: "acme.com",
		}

		Expect(ev.DefaultText(context.Background())).To(ContainSubstring("failed an import"))
	})
})
