import { render, screen } from '@testing-library/react';
import type { ComponentProps } from 'react';
import { describe, expect, it, vi } from 'vitest';
import FichasRegistroShow from '@/pages/fichas-registro/show';

vi.mock('@inertiajs/react', () => ({
    Head: () => null,
    Link: ({ children, href, className }: ComponentProps<'a'>) => (
        <a href={href} className={className}>
            {children}
        </a>
    ),
    useForm: () => ({ patch: vi.fn(), processing: false }),
    setLayoutProps: vi.fn(),
}));

vi.mock('@/routes/fichas-registro', () => ({
    index: { url: () => '/fichas-registro' },
    edit: { url: (id: number) => `/fichas-registro/${id}/editar` },
    downloadPdf: {
        url: (id: number) => `/fichas-registro/${id}/pdf/descargar`,
    },
    observe: { url: (id: number) => `/fichas-registro/${id}/observar` },
    register: { url: (id: number) => `/fichas-registro/${id}/registrar` },
    viewPdf: { url: (id: number) => `/fichas-registro/${id}/pdf/ver` },
}));

vi.mock('@/hooks/use-flash-messages', () => ({
    useFlashMessages: vi.fn(),
}));

describe('FichasRegistroShow', () => {
    it('renders native links for pdf view and download actions', () => {
        render(
            <FichasRegistroShow
                ficha={
                    {
                        id: 10,
                        codigo_catastral: '01-0002-003-04',
                        estado: 'registrado',
                        pdf_inicial_nombre: 'registro.pdf',
                        creator_name: 'Admin',
                        updated_by_name: null,
                        created_at: '2026-04-04T00:00:00Z',
                        updated_at: '2026-04-04T00:00:00Z',
                    } as never
                }
            />,
        );

        const viewLink = screen.getByRole('link', { name: /ver pdf/i });
        const downloadLink = screen.getByRole('link', { name: /descargar/i });

        expect(viewLink).toHaveAttribute('href', '/fichas-registro/10/pdf/ver');
        expect(viewLink).toHaveAttribute('target', '_blank');
        expect(viewLink).toHaveAttribute('rel', 'noopener noreferrer');

        expect(downloadLink).toHaveAttribute(
            'href',
            '/fichas-registro/10/pdf/descargar',
        );
        expect(downloadLink).toHaveAttribute('download');
    });

    it('shows observe button only when backend allows observing', () => {
        render(
            <FichasRegistroShow
                ficha={
                    {
                        id: 12,
                        codigo_catastral: '01-0002-003-04',
                        estado: 'registrado',
                        can_observe: true,
                        can_edit: false,
                        pdf_inicial_nombre: 'registro.pdf',
                        creator_name: 'Admin',
                        updated_by_name: null,
                        created_at: '2026-04-04T00:00:00Z',
                        updated_at: '2026-04-04T00:00:00Z',
                    } as never
                }
            />,
        );

        expect(
            screen.getByRole('button', { name: /observar ficha/i }),
        ).toBeInTheDocument();
        expect(
            screen.queryByRole('link', { name: /editar ficha/i }),
        ).not.toBeInTheDocument();
    });

    it('shows edit action only when backend allows editing', () => {
        render(
            <FichasRegistroShow
                ficha={
                    {
                        id: 14,
                        codigo_catastral: '01-0002-003-04',
                        estado: 'observado',
                        can_observe: false,
                        can_edit: true,
                        pdf_inicial_nombre: 'registro.pdf',
                        creator_name: 'Admin',
                        updated_by_name: null,
                        created_at: '2026-04-04T00:00:00Z',
                        updated_at: '2026-04-04T00:00:00Z',
                    } as never
                }
            />,
        );

        expect(
            screen.getByRole('link', { name: /editar ficha/i }),
        ).toHaveAttribute('href', '/fichas-registro/14/editar');
        expect(
            screen.queryByRole('button', { name: /observar ficha/i }),
        ).not.toBeInTheDocument();
    });

    it('shows register button when backend allows returning to registrado', () => {
        render(
            <FichasRegistroShow
                ficha={
                    {
                        id: 18,
                        codigo_catastral: '01-0002-003-04',
                        estado: 'observado',
                        can_observe: false,
                        can_register: true,
                        can_edit: true,
                        pdf_inicial_nombre: 'registro.pdf',
                        creator_name: 'Admin',
                        updated_by_name: null,
                        created_at: '2026-04-04T00:00:00Z',
                        updated_at: '2026-04-04T00:00:00Z',
                    } as never
                }
            />,
        );

        expect(
            screen.getByRole('button', { name: /registrar ficha/i }),
        ).toBeInTheDocument();
    });
});
