<?php
/**
 * OVP-Sponsorizare
 *
 * @package   OVPSPO_Sponsorizare
 * @author    Ovidiu Pantiru - OVP-Digital
 * @copyright 2024 Ovidiu Pantiru
 * @license   GPL-2.0+
 * @link      https://ovidiupantiru.ro
 */

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

if ( ! class_exists('OVPSPO_Form') ) {
class OVPSPO_Form {

    public static function init() {
        add_shortcode( 'ovpspo_formular230', array( __CLASS__, 'render' ) );
        add_action( 'wp_enqueue_scripts', array( __CLASS__, 'assets' ) );
    }

    public static function assets() {
        // CSS + variabile culoare incarcate intotdeauna pe frontend
        // (has_shortcode() nu functioneaza cu page buildere precum Elementor)
        wp_enqueue_style( 'dashicons' );
        wp_enqueue_style( 'ovpspo-front', OVPSPO_URL . 'assets/css/form.css', array(), OVPSPO_VERSION );

        $culoare_h = OVPSPO_Settings::get( 'culoare_header', '#0F408A' );
        $culoare_a = OVPSPO_Settings::get( 'culoare_accent', '#c8a84b' );
        $culoare_s = OVPSPO_Settings::get( 'culoare_sectiuni', '#0F408A' );
        $culoare_b = OVPSPO_Settings::get( 'culoare_buton', '#0F408A' );
        $culoare_t = OVPSPO_Settings::get( 'culoare_text', '#1c2333' );
        $inline_css230 = sprintf(
            '.bf230-wrap { --culoare:%s; --culoare-accent:%s; --culoare-sectiuni:%s; --culoare-buton:%s; --culoare-text:%s; }',
            esc_attr($culoare_h), esc_attr($culoare_a), esc_attr($culoare_s), esc_attr($culoare_b), esc_attr($culoare_t)
        );
        wp_add_inline_style( 'ovpspo-front', $inline_css230 );

        wp_enqueue_script( 'ovpspo-front', OVPSPO_URL . 'assets/js/form.js', array( 'jquery' ), OVPSPO_VERSION, true );
        wp_localize_script( 'ovpspo-front', 'OVPSPO230', array(
            'ajax_url' => admin_url( 'admin-ajax.php' ),
            'nonce'    => wp_create_nonce( 'ovpspo_submit230' ),
            'culoare'  => OVPSPO_Settings::get( 'culoare_header', '#0F408A' ),
            'org_nume' => OVPSPO_Settings::get( 'org_nume', '' ),
        ) );
    }

    public static function render() {
        $culoare  = OVPSPO_Settings::get( 'culoare_header', '#0F408A' );
        $org_nume = OVPSPO_Settings::get( 'org_nume', 'organizație' );
        $an       = OVPSPO_Settings::get( 'an_fiscal', gmdate('Y') - 1 );

        $judete = array( 'Alba','Arad','Argeș','Bacău','Bihor','Bistrița-Năsăud','Botoșani',
            'Brașov','Brăila','Buzău','Caraș-Severin','Călărași','Cluj','Constanța','Covasna',
            'Dâmbovița','Dolj','Galați','Giurgiu','Gorj','Harghita','Hunedoara','Ialomița',
            'Iași','Ilfov','Maramureș','Mehedinți','Mureș','Neamț','Olt','Prahova',
            'Satu Mare','Sălaj','Sibiu','Suceava','Teleorman','Timiș','Tulcea',
            'Vaslui','Vâlcea','Vrancea','București' );

        ob_start(); ?>
        <div class="bf230-wrap" id="ovpspo-wrap" style="--culoare:<?php echo esc_attr(OVPSPO_Settings::get('culoare_header','#0F408A')); ?>;--culoare-accent:<?php echo esc_attr(OVPSPO_Settings::get('culoare_accent','#c8a84b')); ?>;--culoare-sectiuni:<?php echo esc_attr(OVPSPO_Settings::get('culoare_sectiuni','#0F408A')); ?>;--culoare-buton:<?php echo esc_attr(OVPSPO_Settings::get('culoare_buton','#0F408A')); ?>;--culoare-text:<?php echo esc_attr(OVPSPO_Settings::get('culoare_text','#1c2333')); ?>;">

          <!-- HERO -->
          <div class="bf230-hero">
            <div class="bf230-hero-inner">
              <div class="bf230-badge">Formular 230 – Redirecționare 3,5% din impozit</div>
              <h2>Susține <span><?php echo esc_html($org_nume); ?></span></h2>
              <p>Completează formularul online pentru anul fiscal <strong><?php echo esc_html($an); ?></strong>. Echipa noastră depune la ANAF. Nu te costă nimic.</p>
              <div class="bf230-hero-info">
                <span class="bf230-info-item"><span class="dashicons dashicons-yes"></span> Gratuit</span>
                <span class="bf230-info-item"><span class="dashicons dashicons-shield"></span> Date protejate GDPR</span>
                <span class="bf230-info-item"><span class="dashicons dashicons-yes"></span> Depunem noi la ANAF</span>
              </div>
            </div>
          </div>

          <div class="bf230-body">
            <div class="bf230-alert">
              Prin completarea acestui formular redirecționezi <strong>3,5% din impozitul pe venit</strong> în favoarea <strong><?php echo esc_html($org_nume); ?></strong>.
            </div>

            <form id="ovpspo-form" novalidate>
              <?php wp_nonce_field( 'ovpspo_submit230', 'ovpspo_nonce230' ); ?>
              <input type="hidden" name="action" value="ovpspo_submit230">

              <!-- DATE IDENTIFICARE -->
              <div class="bf230-section">
                <h3>I. Date de identificare a contribuabilului</h3>
                <div class="bf230-row bf230-col3">
                  <div class="bf230-field">
                    <label>Nume <span class="req">*</span></label>
                    <input type="text" name="nume" placeholder="ex. Popescu">
                    <span class="bf230-err">Câmp obligatoriu.</span>
                  </div>
                  <div class="bf230-field">
                    <label>Prenume <span class="req">*</span></label>
                    <input type="text" name="prenume" placeholder="ex. Ion">
                    <span class="bf230-err">Câmp obligatoriu.</span>
                  </div>
                  <div class="bf230-field">
                    <label>Inițiala tatălui <span class="opt">(opțional)</span></label>
                    <input type="text" name="initiala" placeholder="ex. M" maxlength="3">
                  </div>
                </div>
                <div class="bf230-row bf230-col3">
                  <div class="bf230-field">
                    <label>CNP / NIF <span class="req">*</span></label>
                    <input type="text" name="cnp" placeholder="13 cifre" maxlength="13">
                    <span class="bf230-err">CNP invalid – 13 cifre necesare.</span>
                  </div>
                  <div class="bf230-field">
                    <label>Email <span class="opt">(opțional)</span></label>
                    <input type="email" name="email" placeholder="adresa@email.ro">
                    <span class="bf230-err">Adresă email invalidă.</span>
                  </div>
                  <div class="bf230-field">
                    <label>Telefon <span class="opt">(opțional)</span></label>
                    <input type="tel" name="telefon" placeholder="07xx xxx xxx">
                  </div>
                </div>
              </div>

              <!-- ADRESA -->
              <div class="bf230-section">
                <h3>II. Adresa de domiciliu (conform actului de identitate)</h3>
                <div class="bf230-row bf230-col3">
                  <div class="bf230-field">
                    <label>Județ <span class="req">*</span></label>
                    <select name="judet">
                      <option value="">— alege județ —</option>
                      <?php foreach ( $judete as $j ) : ?>
                      <option value="<?php echo esc_attr($j); ?>"><?php echo esc_html($j); ?></option>
                      <?php endforeach; ?>
                    </select>
                    <span class="bf230-err">Te rugăm să selectezi județul.</span>
                  </div>
                  <div class="bf230-field">
                    <label>Localitate <span class="req">*</span></label>
                    <input type="text" name="localitate" placeholder="ex. Cluj-Napoca">
                    <span class="bf230-err">Câmp obligatoriu.</span>
                  </div>
                  <div class="bf230-field">
                    <label>Cod Poștal <span class="opt">(opțional)</span></label>
                    <input type="text" name="cod_postal" placeholder="ex. 400001" maxlength="6">
                  </div>
                </div>
                <div class="bf230-row bf230-col21">
                  <div class="bf230-field">
                    <label>Strada <span class="req">*</span></label>
                    <input type="text" name="strada" placeholder="ex. Str. Republicii">
                    <span class="bf230-err">Câmp obligatoriu.</span>
                  </div>
                  <div class="bf230-field">
                    <label>Număr <span class="req">*</span></label>
                    <input type="text" name="nr" placeholder="ex. 10">
                    <span class="bf230-err">Câmp obligatoriu.</span>
                  </div>
                </div>
                <div class="bf230-row bf230-col4">
                  <div class="bf230-field">
                    <label>Bloc <span class="opt">(op.)</span></label>
                    <input type="text" name="bloc" placeholder="ex. A3">
                  </div>
                  <div class="bf230-field">
                    <label>Scara <span class="opt">(op.)</span></label>
                    <input type="text" name="scara" placeholder="ex. 2">
                  </div>
                  <div class="bf230-field">
                    <label>Etaj <span class="opt">(op.)</span></label>
                    <input type="text" name="etaj" placeholder="ex. 3">
                  </div>
                  <div class="bf230-field">
                    <label>Apartament <span class="opt">(op.)</span></label>
                    <input type="text" name="apart" placeholder="ex. 14">
                  </div>
                </div>
              </div>

              <!-- PERIOADA -->
              <div class="bf230-section">
                <h3>III. Perioada redirecționării</h3>
                <div class="bf230-period">
                  <label class="bf230-period-opt selected">
                    <input type="radio" name="perioada" value="1" checked>
                    <span class="bf230-check-box"></span>Un an
                  </label>
                  <label class="bf230-period-opt">
                    <input type="radio" name="perioada" value="2">
                    <span class="bf230-check-box"></span>Doi ani
                  </label>
                </div>
              </div>

              <!-- SEMNATURA + GDPR -->
              <div class="bf230-section">
                <h3>IV. Acord și semnătură olografă</h3>

                <label class="bf230-check-row" id="ovpspo-gdpr-row">
                  <input type="checkbox" name="gdpr" id="ovpspo-gdpr">
                  <span class="bf230-sq"></span>
                  <span class="bf230-check-label">Sunt de acord ca datele de identificare (nume, prenume și CNP), precum și suma direcționată să fie comunicate entității beneficiare.</span>
                </label>
                <span class="bf230-err" id="ovpspo-err-gdpr">Este necesară bifa pentru a continua.</span>

                <label class="bf230-check-row" id="ovpspo-terms-row">
                  <input type="checkbox" name="terms" id="ovpspo-terms">
                  <span class="bf230-sq"></span>
                  <span class="bf230-check-label">Sunt de acord cu <strong>Termenii de utilizare și politica de confidențialitate (GDPR)</strong>. <span class="req">*</span></span>
                </label>
                <span class="bf230-err" id="ovpspo-err-terms">Acceptarea termenilor este obligatorie.</span>

                <p class="bf230-sig-hint">Semnează cu mouse-ul sau cu degetul în chenarul de mai jos:</p>
                <div class="bf230-sig-wrap">
                  <canvas id="ovpspo-sig-canvas"></canvas>
                  <input type="hidden" name="signature" id="ovpspo-sig-data">
                  <div class="bf230-sig-actions">
                    <button type="button" id="ovpspo-clear-sig" class="bf230-btn-clear">Șterge semnătura</button>
                  </div>
                </div>
                <span class="bf230-err" id="ovpspo-err-sig">Semnătura este obligatorie.</span>

                <div class="bf230-submit-zone">
                  <button type="submit" id="ovpspo-submit" class="bf230-btn-submit">
                    <span class="bf230-btn-text">Trimite formularul</span>
                    <span class="bf230-btn-loading" style="display:none">Se procesează...</span>
                  </button>
                </div>
                <div id="ovpspo-response"></div>
              </div>

            </form>
          </div>
        </div>
        <?php
        return ob_get_clean();
    }
}
} // end class_exists
