import { describe, it, expect } from "vitest";
import { readFileSync } from "node:fs";
import { resolve } from "node:path";

describe("AppHeader Component (prototype port)", () => {
  const componentPath = resolve(__dirname, "../../components/AppHeader.vue");
  const content = readFileSync(componentPath, "utf-8");

  it("should have hms-header class", () => {
    expect(content).toContain("hms-header");
  });

  it("should have nav items: Home, Referenzen, Mietkatalog, Kontakt", () => {
    expect(content).toContain("Home");
    expect(content).toContain("Referenzen");
    expect(content).toContain("Mietkatalog");
    expect(content).toContain("Kontakt");
  });

  it("should have Warenkorb button with hms-btn-primary", () => {
    expect(content).toContain("Warenkorb");
    expect(content).toContain("hms-btn-primary");
  });

  it("should have hms-nav-btn class for nav items", () => {
    expect(content).toContain("hms-nav-btn");
  });

  it("should have mobile burger menu with aria-expanded", () => {
    expect(content).toContain("aria-expanded");
    expect(content).toContain("mobileMenuOpen");
  });

  it("should use HmsLogo component", () => {
    expect(content).toContain("HmsLogo");
  });

  it("should have NuxtLink for navigation", () => {
    expect(content).toContain("NuxtLink");
  });

  it("should have aria-current for active route", () => {
    expect(content).toContain("aria-current");
  });
});

describe("AppFooter Component (prototype port)", () => {
  const componentPath = resolve(__dirname, "../../components/AppFooter.vue");
  const content = readFileSync(componentPath, "utf-8");

  it("should have hms-footer class", () => {
    expect(content).toContain("hms-footer");
  });

  it("should contain address with Leipheim", () => {
    expect(content).toContain("89340");
    expect(content).toContain("Leipheim");
  });

  it("should contain phone number", () => {
    expect(content).toContain("tel:+498221204433");
    expect(content).toContain("204433");
  });

  it("should contain email link info@hms-licht-ton.de", () => {
    expect(content).toContain("mailto:info@hms-licht-ton.de");
  });

  it("should contain Impressum link", () => {
    expect(content).toContain("Impressum");
    expect(content).toContain("/impressum");
  });

  it("should contain DSGVO link", () => {
    expect(content).toContain("DSGVO");
    expect(content).toContain("/datenschutz");
  });

  it("should contain AGB Vermietung link", () => {
    expect(content).toContain("AGB Vermietung");
    expect(content).toContain("/agb-vermietung");
  });

  it("should contain Admin-Login link", () => {
    expect(content).toContain("Admin-Login");
    expect(content).toContain("/admin");
  });

  it("should have 4-column grid layout", () => {
    expect(content).toContain("lg:grid-cols-4");
  });

  it("should include Facebook social icon link", () => {
    expect(content).toContain("facebook.com");
  });

  it("should include Instagram social icon link", () => {
    expect(content).toContain("instagram.com");
  });

  it("should use HmsLogo component", () => {
    expect(content).toContain("HmsLogo");
  });
});

describe("Error Page (404, prototype port)", () => {
  const errorPath = resolve(__dirname, "../../error.vue");
  const content = readFileSync(errorPath, "utf-8");

  it("should contain 'Seite nicht gefunden' for 404", () => {
    expect(content).toContain("Seite nicht gefunden");
  });

  it("should contain 404 text", () => {
    expect(content).toContain("404");
  });

  it("should contain link to home", () => {
    expect(content).toContain('to="/"');
    expect(content).toContain("Zur Startseite");
  });

  it("should include noindex meta tag", () => {
    expect(content).toContain("noindex");
    expect(content).toContain("nofollow");
  });

  it("should have hms-btn hms-btn-primary", () => {
    expect(content).toContain("hms-btn");
    expect(content).toContain("hms-btn-primary");
  });
});

describe("HmsLogo Component (prototype port)", () => {
  const logoPath = resolve(__dirname, "../../components/HmsLogo.vue");
  const content = readFileSync(logoPath, "utf-8");

  it("should render SVG element", () => {
    expect(content).toContain("<svg");
  });

  it("should use orange accent color #EC6925", () => {
    expect(content).toContain("#EC6925");
  });

  it("should have hms-logo-svg class", () => {
    expect(content).toContain("hms-logo-svg");
  });

  it("should accept size prop with default 40", () => {
    expect(content).toContain("size");
    expect(content).toContain("40");
  });
});

describe("robots.txt route", () => {
  const robotsPath = resolve(__dirname, "../../server/routes/robots.txt.ts");
  const content = readFileSync(robotsPath, "utf-8");

  it("should contain User-agent: *", () => {
    expect(content).toContain("User-agent: *");
  });

  it("should contain Disallow: /", () => {
    expect(content).toContain("Disallow: /");
  });
});
