import { repairCanSubmit, repairSubmitWhyDisabled } from "@/lib/repairForm";

const okPhoto = { status: "uploaded" as const };
const okWork = { unlocked: false, override_comment: "" };

describe("repairSubmitWhyDisabled", () => {
  it("нет фото → причина про фото", () => {
    expect(repairSubmitWhyDisabled([], [okWork])).toBe("Добавьте хотя бы одно фото");
  });

  it("фото ещё грузится → причина про загрузку", () => {
    expect(
      repairSubmitWhyDisabled([{ status: "uploading" }], [okWork]),
    ).toBe("Дождитесь окончания загрузки фото");
  });

  it("фото с ошибкой загрузки тоже блокирует", () => {
    expect(
      repairSubmitWhyDisabled([{ status: "error" }], [okWork]),
    ).toBe("Дождитесь окончания загрузки фото");
  });

  it("нет работ → причина про работы", () => {
    expect(repairSubmitWhyDisabled([okPhoto], [])).toBe("Добавьте хотя бы одну работу");
  });

  it("разблокированная цена без комментария → требует комментарий", () => {
    expect(
      repairSubmitWhyDisabled([okPhoto], [{ unlocked: true, override_comment: "  " }]),
    ).toBe("Укажите комментарий к ручной правке цены");
  });

  it("разблокированная цена с комментарием → ок", () => {
    expect(
      repairSubmitWhyDisabled([okPhoto], [{ unlocked: true, override_comment: "скидка" }]),
    ).toBe("");
  });

  it("валидная форма → пустая причина", () => {
    expect(repairSubmitWhyDisabled([okPhoto], [okWork])).toBe("");
  });
});

describe("repairCanSubmit", () => {
  it("= (нет причины блокировки)", () => {
    expect(repairCanSubmit([okPhoto], [okWork])).toBe(true);
    expect(repairCanSubmit([], [okWork])).toBe(false);
    expect(repairCanSubmit([{ status: "uploading" }], [okWork])).toBe(false);
  });
});
