import { describe, expect, it } from "vitest";
import { formatDate, formatStamp, formatTime, phpDate } from "./format";

describe("phpDate", () => {
    const d = new Date(2026, 9, 21, 14, 5, 9);

    it("covers the formats WordPress offers in Settings > General", () => {
        expect(phpDate("F j, Y", d)).toBe("October 21, 2026");
        expect(phpDate("Y-m-d", d)).toBe("2026-10-21");
        expect(phpDate("m/d/Y", d)).toBe("10/21/2026");
        expect(phpDate("d/m/Y", d)).toBe("21/10/2026");
        expect(phpDate("g:i a", d)).toBe("2:05 pm");
        expect(phpDate("g:i A", d)).toBe("2:05 PM");
        expect(phpDate("H:i", d)).toBe("14:05");
    });

    it("handles day names, suffixes and escaped letters", () => {
        expect(phpDate("D, M jS", d)).toBe("Wed, Oct 21st");
        expect(phpDate("l \\t\\h\\e jS", new Date(2026, 9, 12))).toBe("Monday the 12th");
        expect(phpDate("g a", new Date(2026, 0, 1, 0, 0))).toBe("12 am");
    });
});

describe("site formats", () => {
    it("formats dates, times and stamps from the config", () => {
        expect(formatDate("2026-10-21")).toBe("October 21, 2026");
        expect(formatTime("09:30:00")).toBe("9:30 am");
        expect(formatStamp("2026-10-21 14:05:00")).toBe("October 21, 2026 2:05 pm");
    });

    it("gives back what it cannot read", () => {
        expect(formatDate("")).toBe("");
        expect(formatTime("")).toBe("");
        expect(formatStamp("0000-00-00 00:00:00")).toBe("");
        expect(formatDate("soon")).toBe("soon");
    });
});
