import { parseTime, getAutoplaySettings } from "../utils";

describe("parseTime", () => {
  it("should return the parsed time in seconds", () => {
    expect(parseTime("01:30")).toBe(90);
    expect(parseTime("00:45")).toBe(45);
    expect(parseTime("10:00")).toBe(600);
  });

  it("should throw error for invalid time formats", () => {
    const error = "Invalid time format";
    expect(() => parseTime("")).toThrow(error);
    expect(() => parseTime("abc")).toThrow(error);
    expect(() => parseTime("12")).toThrow(error);
    expect(() => parseTime(":12")).toThrow(error);
    expect(() => parseTime("00:60")).toThrow(error);
    expect(() => parseTime("-10:00")).toThrow(error);
  });
});

describe("getAutoplaySettings", () => {
  it("should return the autoplay settings with parsed start and end times", () => {
    const item = {
      extensions: {
        autoplay_settings: {
          start_time: "01:30",
          end_time: "02:00",
        },
      },
    };

    const { start, end } = getAutoplaySettings(item);

    expect(start).toBe(90);
    expect(end).toBe(120);
  });

  it("should return null for missing start or end times", () => {
    const item = {
      extensions: {
        autoplay_settings: {
          start_time: "01:30",
        },
      },
    };

    const { start, end } = getAutoplaySettings(item);

    expect(start).toBe(90);
    expect(end).toBeNull();
  });

  it("should return null for invalid start or end times", () => {
    const item = {
      extensions: {
        autoplay_settings: {
          start_time: "abc",
          end_time: "def",
        },
      },
    };

    const { start, end } = getAutoplaySettings(item);

    expect(start).toBeNull();
    expect(end).toBeNull();
  });

  it("should return null end time if start time greater than end time", () => {
    const item = {
      extensions: {
        autoplay_settings: {
          start_time: "02:00",
          end_time: "01:30",
        },
      },
    };

    const { start, end } = getAutoplaySettings(item);

    expect(start).toBe(120);
    expect(end).toBeNull();
  });

  it("should return null end time if start time equal to end time", () => {
    const item = {
      extensions: {
        autoplay_settings: {
          start_time: "00:30",
          end_time: "00:30",
        },
      },
    };

    const { start, end } = getAutoplaySettings(item);

    expect(start).toBe(30);
    expect(end).toBeNull();
  });

  it("should return null for missing autoplay settings", () => {
    const item = {};

    const result = getAutoplaySettings(item);

    expect(result.start).toBeNull();
    expect(result.end).toBeNull();
  });
});
