import { render, screen } from "@testing-library/react";
import { ProductAvailability } from "./ProductAvailability";
import { describe, it, expect } from "vitest";
import React from "react";
import "@testing-library/jest-dom";

describe("ProductAvailability", () => {
  const availableProduct = {
    price: "49.99",
    stock: "10",
    min_delivery_time: "2",
    max_delivery_time: "4",
    delivery_days: "Werktagen" as const,
  };

  const outOfStockProduct = {
    price: "49.99",
    stock: "0",
    min_delivery_time: "2",
    max_delivery_time: "4",
    delivery_days: "Werktagen" as const,
  };

  const zeroPriceProduct = {
    price: "0",
    stock: "10",
    min_delivery_time: "2",
    max_delivery_time: "4",
    delivery_days: "Werktagen" as const,
  };

  it("renders 'Verfügbar' and delivery time when product is in stock and has a price", () => {
    render(<ProductAvailability productDetails={availableProduct as any} />);

    expect(screen.getByText(/Verfügbar/)).toBeInTheDocument();
    expect(screen.getByText(/Lieferung in 2–4 Werktagen/)).toBeInTheDocument();

    const indicator = screen.getByText((_, element) => {
        return element?.className.includes('bg-green-600') ?? false;
    });
    expect(indicator).toBeInTheDocument();
  });

  it("renders 'Nicht verfügbar' when product is out of stock", () => {
    render(<ProductAvailability productDetails={outOfStockProduct as any} />);

    expect(screen.getByText(/Nicht verfügbar/)).toBeInTheDocument();
    expect(screen.queryByText(/Lieferung in/)).not.toBeInTheDocument();

    const indicator = screen.getByText((_, element) => {
        return element?.className.includes('bg-red-600') ?? false;
    });
    expect(indicator).toBeInTheDocument();
  });

  it("renders 'Nicht verfügbar' when product price is '0'", () => {
    render(<ProductAvailability productDetails={zeroPriceProduct as any} />);

    expect(screen.getByText(/Nicht verfügbar/)).toBeInTheDocument();
  });
});
