import { describe, it, expect } from "vitest";
import { parseCommand } from "../src/cli.js";

describe("parseCommand", () => {
  it("empty argv → command: help", () => {
    expect(parseCommand([])).toEqual({ command: "help", args: {} });
  });

  it("unknown command → command: help", () => {
    expect(parseCommand(["unknown"])).toEqual({ command: "help", args: {} });
  });

  it("init → command: init", () => {
    const result = parseCommand(["init"]);
    expect(result.command).toBe("init");
  });

  it("list → command: list", () => {
    const result = parseCommand(["list"]);
    expect(result.command).toBe("list");
  });

  it("add dialog → command: add, args.component: dialog", () => {
    const result = parseCommand(["add", "dialog"]);
    expect(result.command).toBe("add");
    expect(result.args["component"]).toBe("dialog");
  });

  it("add dialog --dir src/ui → args.dir: src/ui", () => {
    const result = parseCommand(["add", "dialog", "--dir", "src/ui"]);
    expect(result.command).toBe("add");
    expect(result.args["component"]).toBe("dialog");
    expect(result.args["dir"]).toBe("src/ui");
  });

  it("inspect dialog → command: inspect, args.component: dialog", () => {
    const result = parseCommand(["inspect", "dialog"]);
    expect(result.command).toBe("inspect");
    expect(result.args["component"]).toBe("dialog");
  });

  it("discover modal → command: discover, args.component: modal", () => {
    const result = parseCommand(["discover", "modal"]);
    expect(result.command).toBe("discover");
    expect(result.args["component"]).toBe("modal");
  });

  it("help → command: help", () => {
    const result = parseCommand(["help"]);
    expect(result.command).toBe("help");
  });

  it("init --dir src/styles → args.dir: src/styles", () => {
    const result = parseCommand(["init", "--dir", "src/styles"]);
    expect(result.command).toBe("init");
    expect(result.args["dir"]).toBe("src/styles");
  });

  it("--dir without value is ignored", () => {
    const result = parseCommand(["list", "--dir"]);
    expect(result.command).toBe("list");
    expect(result.args["dir"]).toBeUndefined();
  });
});
