import React from 'react';
import {render, screen} from '@testing-library/react';
import PartnerEventCard from '../PartnerEventCard';
import type {Evenement} from '@/types/stage';

jest.mock('next/link', () => {
  return ({children, href, ...props}: {children: React.ReactNode; href: string; [key: string]: unknown}) => (
    <a href={href} {...props}>{children}</a>
  );
});

const mockEvent: Evenement = {
  eveId: 1,
  eveDate: '2026-03-15',
  eveHeure: '20h30',
  eveLibelle: 'Fest-noz partenaire Quimper',
  eveTev: {tevLibelle: 'Fest-noz'},
  eveVil: {vilNom: 'Quimper', vilCodepostal: '29000', vilGeoX: -4.1, vilGeoY: 48.0, vilGeoZoom: 12},
  evePla: null,
  aenOrganisateurs: []
};

describe('PartnerEventCard', () => {
  it('shouldRenderEventTitleDateAndLocation', () => {
    render(<PartnerEventCard event={mockEvent} locale="fr" />);

    expect(screen.getByText('Fest-noz partenaire Quimper')).toBeInTheDocument();
    expect(screen.getByText('Quimper')).toBeInTheDocument();
    expect(screen.getByText(/15/)).toBeInTheDocument();
  });

  it('shouldRenderPartnerBadgeWithStar', () => {
    const {container} = render(<PartnerEventCard event={mockEvent} locale="fr" />);

    expect(screen.getByText('Partenaire')).toBeInTheDocument();
    const badge = container.querySelector('.partner-event-card__badge');
    expect(badge).toBeInTheDocument();
  });

  it('shouldRenderEventTypeBadge', () => {
    render(<PartnerEventCard event={mockEvent} locale="fr" />);

    expect(screen.getByText('Fest-noz')).toBeInTheDocument();
  });

  it('shouldRenderEventImageWhenProvided', () => {
    const {container} = render(
      <PartnerEventCard event={mockEvent} locale="fr" imageUrl="https://example.com/partner.jpg" />
    );

    const img = container.querySelector('img');
    expect(img).toBeInTheDocument();
    expect(img?.getAttribute('src')).toBe('https://example.com/partner.jpg');
  });

  it('shouldRenderPlaceholderWhenNoImage', () => {
    const {container} = render(<PartnerEventCard event={mockEvent} locale="fr" />);

    const placeholder = container.querySelector('.partner-event-card__image-placeholder');
    expect(placeholder).toBeInTheDocument();
  });

  it('shouldLinkToEventDetailPage', () => {
    render(<PartnerEventCard event={mockEvent} locale="fr" />);

    const link = screen.getByRole('link');
    expect(link).toHaveAttribute('href', expect.stringMatching(/^\/fr\/evenement\/1(\/|$)/));
  });
});
