<?php
/**
 * Frontend-Integration über den Shortcode [angebot_generator].
 *
 * Das Formular wird nur eingeloggten, berechtigten Nutzer:innen
 * (Admin/Mitarbeiter) angezeigt. Das Absenden wird sehr früh (template_redirect)
 * verarbeitet, damit der PDF-Download vor jeglicher Theme-Ausgabe erfolgen kann.
 */

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

class AG_Shortcode {

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

    public static function init() {
        add_shortcode( 'angebot_generator', array( __CLASS__, 'render' ) );
        add_action( 'wp_enqueue_scripts', array( __CLASS__, 'register_assets' ) );
        add_action( 'template_redirect', array( __CLASS__, 'maybe_handle' ) );
    }

    public static function register_assets() {
        wp_register_style( 'ag-style', AG_PLUGIN_URL . 'assets/style.css', array(), AG_VERSION );
        wp_register_script( 'ag-script', AG_PLUGIN_URL . 'assets/script.js', array(), AG_VERSION, true );
    }

    /**
     * Verarbeitet das Formular früh, solange noch keine Ausgabe erfolgt ist
     * (nötig für den PDF-Stream mit eigenen HTTP-Headern).
     */
    public static function maybe_handle() {
        if ( empty( $_POST['ag_nonce'] ) ) {
            return;
        }
        self::$result = AG_Form::handle_submit(); // streamt bei "PDF" und beendet
    }

    public static function render( $atts ) {
        if ( ! AG_Form::current_user_can_use() ) {
            return '<p>Bitte melde dich an, um Angebote zu erstellen. (Nur für Mitarbeiter:innen.)</p>';
        }

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

        if ( self::$result ) {
            $notice   = array( 'status' => self::$result['status'], 'message' => self::$result['message'] );
            $offer    = self::$result['offer'];
            $offer_id = self::$result['offer_id'];
        }

        return AG_Form::render_form( $offer, $offer_id, $notice );
    }
}
