import { expect } from "e2e";
import { test, WEB } from "./t3.ts";

test("New chats retry the environment default when the project model is hidden", WEB, async ({ t3, app, screen, browser }) => {
  await t3.project("Model defaults demo");
  await t3.open();
  await screen.getByRole("button", "New thread in Model defaults demo").first().tap();
  const configure = async (hidden: boolean) => browser.evaluate(async (hide) => {
    const { appAtomRegistry } = await import("/src/rpc/atomRegistry.ts");
    const { readProjects } = await import("/src/state/entities.ts");
    const { serverEnvironment } = await import("/src/state/server.ts");
    const project = readProjects().find((p) => p.title === "Model defaults demo");
    if (!project) throw new Error("Scenario project is unavailable");
    const result = await serverEnvironment.updateSettings.run(appAtomRegistry, {
      environmentId: project.environmentId,
      input: { patch: {
        defaultModelSelection: { instanceId: "devReplay", model: "todo-list" },
        projectSettingsOverrides: { [project.id]: { defaultModelSelection: { instanceId: "devReplay", model: "multi-turn" } } },
        providerModelPreferences: { devReplay: { hiddenModels: hide ? ["multi-turn"] : [], modelOrder: [] } },
      } },
    });
    if (result._tag !== "Success") throw new Error("Settings RPC failed");
  }, hidden);
  await configure(false);
  await screen.getByRole("button", "New thread in Model defaults demo").first().tap();
  await app.screenshot("visible-project-override");
  await expect(browser.locator("[data-chat-provider-model-picker]")).toContainText("Multi turn");
  await configure(true);
  await screen.getByRole("button", "New thread in Model defaults demo").first().tap();
  await app.screenshot("hidden-project-default");
  await expect.soft(browser.locator("[data-chat-provider-model-picker]")).toContainText("Plan and reads");
  await configure(false);
  await screen.getByRole("button", "New thread in Model defaults demo").first().tap();
  await app.screenshot("restored-project-override");
  await expect(browser.locator("[data-chat-provider-model-picker]")).toContainText("Multi turn");
});
