import React from "react";
import { render, screen, fireEvent } from "@testing-library/react";
import BlackboardPage from "@/app/(private)/dashboard/team/blackboard/page";
import { describe, it, expect, vi, beforeEach } from "vitest";
import { useBlackboardStore } from "@/hooks/useBlackboardStore";
import { usePresenceStore } from "@/hooks/usePresenceStore";

// Mock stores
vi.mock("@/hooks/useBlackboardStore", () => ({
  useBlackboardStore: vi.fn(),
}));

vi.mock("@/hooks/usePresenceStore", () => ({
  usePresenceStore: vi.fn(),
}));

describe("BlackboardPage", () => {
  const mockUpdateTask = vi.fn();
  const mockFetchTasks = vi.fn();
  const mockFetchPresenceData = vi.fn();

  const defaultTasks = [
    {
      id: "task-1",
      title: "Test Task 1",
      content: "Details 1",
      status: "todo",
      priority: "normal",
      created_at: new Date().toISOString(),
      assigned_to_name: "User 1",
    },
  ];

  beforeEach(() => {
    vi.clearAllMocks();
    vi.mocked(useBlackboardStore).mockReturnValue({
      tasks: defaultTasks,
      isLoading: false,
      fetchTasks: mockFetchTasks,
      updateTask: mockUpdateTask,
      createTask: vi.fn(),
      deleteTask: vi.fn(),
    } as any);

    vi.mocked(usePresenceStore).mockReturnValue({
      presenceData: { users: [] },
      fetchPresenceData: mockFetchPresenceData,
    } as any);
  });

  it("renders tasks in correct columns", () => {
    render(<BlackboardPage />);
    expect(screen.getByText("Test Task 1")).toBeInTheDocument();
    expect(screen.getByText("To Do")).toBeInTheDocument();
  });

  it("does not show the 'Weiter' button (replaced by drag and drop)", () => {
    render(<BlackboardPage />);
    expect(screen.queryByText(/Weiter/i)).not.toBeInTheDocument();
  });

  it("calls updateTask when a task is dragged to a new column", () => {
    // This is a bit complex because dnd-kit is hard to trigger manually.
    // But we can check if the columns have the correct droppable IDs.
    render(<BlackboardPage />);
    expect(screen.getByTestId("column-todo")).toBeInTheDocument();
    expect(screen.getByTestId("column-in_progress")).toBeInTheDocument();
    expect(screen.getByTestId("column-done")).toBeInTheDocument();
  });
});
