<?php
declare(strict_types=1);

namespace Itdatex\Rechnungseingang\Admin\Pages;

if ( ! defined( 'ABSPATH' ) ) { exit; }

use Itdatex\Rechnungseingang\Admin\Menu;
use Itdatex\Rechnungseingang\DownloadHandler;
use Itdatex\Rechnungseingang\InvoiceRepository;
use Itdatex\Rechnungseingang\Plugin;

final class Invoice
{
    public function register(): void
    {
        // Diese Seite ist ein "verstecktes" Submenu (parent_slug = null in Menu::add_menu()).
        // Versteckte Submenus erscheinen nicht in $submenu, daher kann WP den Tab-Titel
        // ('<title>') nicht aus dem Menu ableiten — er bleibt leer. Wir setzen ihn ueber
        // den admin_title-Filter, inklusive Rechnungsnummer, wenn vorhanden.
        add_filter( 'admin_title', [ self::class, 'filter_admin_title' ], 10, 2 );
    }

    public static function filter_admin_title( string $admin_title, string $title ): string
    {
        if ( $title !== '' ) {
            return $admin_title;
        }
        if ( ! isset( $_GET['page'] ) || $_GET['page'] !== Menu::SLUG_INVOICE ) {
            return $admin_title;
        }
        $id    = isset( $_GET['id'] ) ? (int) $_GET['id'] : 0;
        $label = __( 'Rechnung', 'itdatex-e-invoice-intake' );
        if ( $id > 0 ) {
            $invoice = ( new InvoiceRepository() )->findInvoice( $id );
            if ( $invoice && ! empty( $invoice->invoice_number ) ) {
                $label .= ' ' . (string) $invoice->invoice_number;
            }
        }
        // $admin_title beginnt hier mit " &lsaquo; <Sitename> &#8212; WordPress"
        // (Title-Slot ist leer); wir setzen den Label-Teil davor.
        return $label . $admin_title;
    }

    public static function render(): void
    {
        if ( ! current_user_can( Plugin::CAPABILITY ) ) {
            wp_die( esc_html__( 'Keine Berechtigung.', 'itdatex-e-invoice-intake' ), '', [ 'response' => 403 ] );
        }

        $id      = isset( $_GET['id'] ) ? (int) $_GET['id'] : 0;
        $repo    = new InvoiceRepository();
        $invoice = $id > 0 ? $repo->findInvoice( $id ) : null;
        if ( ! $invoice ) {
            echo '<div class="wrap"><h1>' . esc_html__( 'Rechnung nicht gefunden', 'itdatex-e-invoice-intake' ) . '</h1>';
            echo '<p><a href="' . esc_url( admin_url( 'admin.php?page=itdatex-e-invoice-intake' ) ) . '">' . esc_html__( '← Zurueck zum Eingang', 'itdatex-e-invoice-intake' ) . '</a></p></div>';
            return;
        }

        $file        = $repo->findFile( (int) $invoice->file_id );
        $auditTrail  = $repo->auditForInvoice( (int) $invoice->id );
        $reportData  = $invoice->validation_report ? json_decode( (string) $invoice->validation_report, true ) : null;
        $downloadUrl = $file ? wp_nonce_url(
            add_query_arg(
                [ 'action' => DownloadHandler::ACTION, 'file_id' => (int) $file->id ],
                admin_url( 'admin-post.php' )
            ),
            DownloadHandler::ACTION . '_' . (int) $file->id,
            DownloadHandler::NONCE
        ) : '';

        include REING_DIR . 'admin/views/page-invoice.php';
    }
}
