/**
 * QuickCaptureWidget (Dashboard) Component Tests
 * Tests environment-based behavior
 */

import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen } from "@testing-library/react";
import { QuickCaptureWidget } from "../QuickCaptureWidget";

// Mock next/navigation
vi.mock("next/navigation", () => ({
  useRouter: (): { push: () => void } => ({
    push: vi.fn(),
  }),
}));

describe("QuickCaptureWidget (Dashboard)", (): void => {
  beforeEach((): void => {
    vi.clearAllMocks();
  });

  afterEach((): void => {
    vi.unstubAllEnvs();
  });

  describe("Development mode", (): void => {
    beforeEach((): void => {
      vi.stubEnv("NODE_ENV", "development");
    });

    it("should render the widget form in development", (): void => {
      render(<QuickCaptureWidget />);

      // Should show the header
      expect(screen.getByText("Quick Capture")).toBeInTheDocument();
      // Should show the textarea
      expect(screen.getByRole("textbox")).toBeInTheDocument();
      // Should show the Save Note button
      expect(screen.getByRole("button", { name: /save note/i })).toBeInTheDocument();
      // Should show the Create Task button
      expect(screen.getByRole("button", { name: /create task/i })).toBeInTheDocument();
      // Should NOT show Coming Soon badge
      expect(screen.queryByText("Coming Soon")).not.toBeInTheDocument();
    });

    it("should have a placeholder for the textarea", (): void => {
      render(<QuickCaptureWidget />);

      const textarea = screen.getByRole("textbox");
      expect(textarea).toHaveAttribute("placeholder", "What's on your mind?");
    });
  });

  describe("Production mode", (): void => {
    beforeEach((): void => {
      vi.stubEnv("NODE_ENV", "production");
    });

    it("should show Coming Soon placeholder in production", (): void => {
      render(<QuickCaptureWidget />);

      // Should show Coming Soon badge
      expect(screen.getByText("Coming Soon")).toBeInTheDocument();
      // Should show feature name
      expect(screen.getByText("Quick Capture")).toBeInTheDocument();
      // Should NOT show the textarea
      expect(screen.queryByRole("textbox")).not.toBeInTheDocument();
      // Should NOT show the buttons
      expect(screen.queryByRole("button", { name: /save note/i })).not.toBeInTheDocument();
      expect(screen.queryByRole("button", { name: /create task/i })).not.toBeInTheDocument();
    });

    it("should show description in Coming Soon placeholder", (): void => {
      render(<QuickCaptureWidget />);

      expect(screen.getByText(/jot down ideas for later organization/i)).toBeInTheDocument();
    });
  });

  describe("Test mode (non-development)", (): void => {
    beforeEach((): void => {
      vi.stubEnv("NODE_ENV", "test");
    });

    it("should show Coming Soon placeholder in test mode", (): void => {
      render(<QuickCaptureWidget />);

      // Test mode is not development, so should show Coming Soon
      expect(screen.getByText("Coming Soon")).toBeInTheDocument();
      expect(screen.queryByRole("textbox")).not.toBeInTheDocument();
    });
  });
});
