import {
  formatGregorianToBangla,
  convertToBanglaDate,
  getBanglaDateDetails,
  BANGLA_MONTHS,
  BANGLA_SEASONS,
  BANGLA_WEEKDAYS,
} from "./banglaDate"

describe("Bangla Date Utils", () => {
  it("should format Gregorian date in Bangla language", () => {
    const dateString = "2025-05-12T10:30:00Z" // May 12, 2025
    const result = formatGregorianToBangla(dateString, "medium")
    expect(result).toBe("১২ মে, ২০২৫")
  })

  it("should format Gregorian date in Bangla language with full format", () => {
    const dateString = "2025-05-12T10:30:00Z" // May 12, 2025 (Monday)
    const result = formatGregorianToBangla(dateString, "full")
    expect(result).toContain("১২ মে, ২০২৫")
    // Note: The weekday test would depend on the actual day of the week for this date
  })

  it("should format Gregorian date in Bangla language with short format", () => {
    const dateString = "2025-05-12T10:30:00Z" // May 12, 2025
    const result = formatGregorianToBangla(dateString, "short")
    expect(result).toBe("১২/৫/২০২৫")
  })

  it("should convert date string to Bangla calendar date", () => {
    const dateString = "2025-05-12T10:30:00Z" // May 12, 2025
    expect(convertToBanglaDate(dateString, "medium")).toContain("বৈশাখ")
  })

  it("should convert date string to Bangla calendar date with full format", () => {
    const dateString = "2025-04-14" // April 14, 2025 (Bangla New Year)
    const result = convertToBanglaDate(dateString, "full")
    expect(result).toContain("বৈশাখ")
    expect(result).toContain("গ্রীষ্ম") // Should include season
  })

  it("should convert date string to Bangla calendar date with short format", () => {
    const dateString = "2025-04-14" // April 14, 2025 (Bangla New Year)
    const result = convertToBanglaDate(dateString, "short")
    expect(result).toMatch(/\d+\/\d+\/\d+/) // Should be in format like "১/১/১৪৩২"
  })

  it("should get detailed Bangla calendar date information", () => {
    const dateString = "2025-04-14" // April 14, 2025 (Bangla New Year)
    const result = getBanglaDateDetails(dateString)

    expect(result.details.date).toBe(1)
    expect(result.details.month).toBe(1)
    expect(result.details.monthName).toBe("বৈশাখ")
    expect(result.details.season).toBe("গ্রীষ্ম")
    expect(result.formatted).toBe("১ বৈশাখ ১৪৩২")
  })

  it("should throw error for invalid date string", () => {
    const invalidDateString = "not-a-date"
    expect(() => formatGregorianToBangla(invalidDateString)).toThrow()
    expect(() => convertToBanglaDate(invalidDateString)).toThrow()
  })

  it("should have all Bangla months defined", () => {
    expect(BANGLA_MONTHS.length).toBe(12)
    expect(BANGLA_MONTHS[0]).toBe("বৈশাখ")
    expect(BANGLA_MONTHS[11]).toBe("চৈত্র")
  })

  it("should have all Bangla seasons defined", () => {
    expect(BANGLA_SEASONS.length).toBe(6)
    expect(BANGLA_SEASONS[0]).toBe("গ্রীষ্ম")
    expect(BANGLA_SEASONS[5]).toBe("বসন্ত")
  })

  it("should have all Bangla weekdays defined", () => {
    expect(BANGLA_WEEKDAYS.length).toBe(7)
    expect(BANGLA_WEEKDAYS[0]).toBe("রবিবার")
    expect(BANGLA_WEEKDAYS[6]).toBe("শনিবার")
  })
})
