<?php
/**
 * Backend-Integration: Menüpunkt mit Eingabemaske und Liste der Angebote.
 */

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

class AG_Admin {

    public static function init() {
        add_action( 'admin_menu', array( __CLASS__, 'menu' ) );
        // Formular früh verarbeiten (für den PDF-Download vor jeglicher Ausgabe).
        add_action( 'admin_init', array( __CLASS__, 'maybe_handle' ) );
    }

    public static function menu() {
        add_menu_page(
            'Angebote',
            'Angebote',
            AG_Form::CAP,
            'ag-angebote',
            array( __CLASS__, 'render_page' ),
            'dashicons-media-document',
            26
        );
        add_submenu_page( 'ag-angebote', 'Neues Angebot', 'Neues Angebot', AG_Form::CAP, 'ag-angebote', array( __CLASS__, 'render_page' ) );
        add_submenu_page( 'ag-angebote', 'Gespeicherte Angebote', 'Gespeicherte Angebote', AG_Form::CAP, 'ag-angebote-liste', array( __CLASS__, 'render_list' ) );
        add_submenu_page( 'ag-angebote', 'Firmendaten', 'Firmendaten', 'manage_options', 'ag-firmendaten', array( 'AG_Settings', 'render_page' ) );
        add_submenu_page( 'ag-angebote', 'Kalender', 'Kalender', 'manage_options', 'ag-kalender', array( 'AG_Calendar', 'render_page' ) );
    }

    /** @var array|null Ergebnis der Formularverarbeitung */
    private static $result = null;

    public static function maybe_handle() {
        if ( empty( $_POST['ag_nonce'] ) ) {
            return;
        }
        // handle_submit() streamt bei "PDF" direkt und beendet.
        self::$result = AG_Form::handle_submit();
    }

    public static function render_page() {
        if ( ! AG_Form::current_user_can_use() ) {
            wp_die( 'Keine Berechtigung.' );
        }

        $offer    = array();
        $offer_id = 0;
        $notice   = null;

        // Nach dem Speichern: Werte übernehmen und Meldung zeigen.
        if ( self::$result ) {
            $notice   = array( 'status' => self::$result['status'], 'message' => self::$result['message'] );
            $offer    = self::$result['offer'];
            $offer_id = self::$result['offer_id'];
        }

        // Bearbeiten eines bestehenden Angebots?
        if ( empty( $offer ) && isset( $_GET['edit'] ) ) {
            $existing = AG_DB::get( (int) $_GET['edit'] );
            if ( $existing ) {
                $offer    = $existing['data'];
                $offer['number']     = $existing['number'];
                $offer['offer_date'] = $existing['offer_date'];
                $offer_id = (int) $existing['id'];
            }
        }

        // Das Formular-HTML stammt vollständig aus vertrauenswürdigem
        // Plugin-Code (keine ungefilterten Fremd-Eingaben); alle dynamischen
        // Werte sind in AG_Form::render_form() bereits escaped.
        echo '<div class="wrap">';
        echo AG_Form::render_form( $offer, $offer_id, $notice ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
        echo '</div>';
    }

    public static function render_list() {
        if ( ! AG_Form::current_user_can_use() ) {
            wp_die( 'Keine Berechtigung.' );
        }

        // Löschen verarbeiten
        if ( isset( $_GET['delete'] ) && check_admin_referer( 'ag_delete_' . (int) $_GET['delete'] ) ) {
            AG_DB::delete( (int) $_GET['delete'] );
            echo '<div class="notice notice-success"><p>Angebot gelöscht.</p></div>';
        }

        $offers = AG_DB::get_all();
        ?>
        <div class="wrap">
            <h1>Gespeicherte Angebote</h1>
            <p><a href="<?php echo esc_url( admin_url( 'admin.php?page=ag-angebote' ) ); ?>" class="button button-primary">+ Neues Angebot</a></p>

            <?php if ( empty( $offers ) ) : ?>
                <p>Noch keine Angebote gespeichert.</p>
            <?php else : ?>
                <table class="widefat striped">
                    <thead>
                        <tr>
                            <th>Nummer</th><th>Datum</th><th>Kunde</th><th>Sprache</th><th>Volumen</th><th>Gesamt</th><th>Aktionen</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ( $offers as $o ) :
                            $d = $o['data'];
                            $client = trim( ( $d['first_name'] ?? '' ) . ' ' . ( $d['last_name'] ?? '' ) );
                            if ( '' === $client ) { $client = $d['client_name'] ?? ''; }
                            $edit_url   = admin_url( 'admin.php?page=ag-angebote&edit=' . (int) $o['id'] );
                            $delete_url = wp_nonce_url( admin_url( 'admin.php?page=ag-angebote-liste&delete=' . (int) $o['id'] ), 'ag_delete_' . (int) $o['id'] );
                            ?>
                            <tr>
                                <td><strong><?php echo esc_html( $o['number'] ); ?></strong></td>
                                <td><?php echo esc_html( AG_Offer::format_date_display( $o['offer_date'] ) ); ?></td>
                                <td><?php echo esc_html( $client ); ?></td>
                                <td><?php echo esc_html( $d['language'] ?? '' ); ?></td>
                                <td><?php echo esc_html( $d['volume'] ?? '' ); ?></td>
                                <td><?php echo esc_html( isset( $d['total'] ) ? AG_Offer::format_money( $d['total'] ) : '' ); ?></td>
                                <td>
                                    <a class="button" href="<?php echo esc_url( $edit_url ); ?>">Bearbeiten / PDF</a>
                                    <a class="button button-link-delete" href="<?php echo esc_url( $delete_url ); ?>" onclick="return confirm('Angebot wirklich löschen?');">Löschen</a>
                                </td>
                            </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            <?php endif; ?>
        </div>
        <?php
    }

}
