AlkantarClanX12

Your IP : 216.73.217.24


Current Path : /www/capitalgmcbuickregina_830/public/wp-content/plugins/leadbox/lib/
Upload File :
Current File : /www/capitalgmcbuickregina_830/public/wp-content/plugins/leadbox/lib/settings.php

<?php

use function PHPSTORM_META\type;

/**
 * Check if current page is a Leadbox/Dealer settings page or saving settings
 * Used to conditionally load settings registration for performance optimization
 *
 * @return bool True if on Leadbox or Dealer settings page, or saving settings
 */
function leadbox_is_settings_page()
{
    // Check if we're on options.php (saving settings)
    global $pagenow;
    if ($pagenow === 'options.php') {
        // Check if saving a Leadbox/Dealer option
        $option_page = isset($_POST['option_page']) ? sanitize_text_field($_POST['option_page']) : '';
        $leadbox_option_groups = array(
            'custom-css-options-group',
            'leadbox-settings-options-group',
            'dealer-settings-branding-options-group',
            'dealer-settings-web-info-group',
            'dealer-settings-showroom-group',
            'dealer-settings-vdp-payment-group',
            'dealer-settings-used-finance-group',
            'dealer-settings-hours-options-group',
            'dealer-settings-labels-options-group',
            'dealer-settings-my-garage-options-group',
            'dealer-settings-listing-options-group',
            'dealer-settings-used-finance-custom-options-group',
            'dealer-settings-contact-options-group',
            'dealer-settings-socialmedia-options-group',
            'dealer-settings-policies-options-group',
            'dealer-settings-disclaimer-options-group',
            'dealer-settings-filter-options-group',
            'dealer-settings-iboost-options-group',
        );
        if (in_array($option_page, $leadbox_option_groups, true)) {
            return true;
        }
    }

    $page = isset($_GET['page']) ? sanitize_text_field($_GET['page']) : '';

    $settings_pages = array(
        // Leadbox Settings pages
        'leadbox-settings',
        'leadbox-settings-genius',
        'leadbox-settings-leads-sent',
        'leadbox-settings-load-dealer-settings',
        'leadbox-logs',
        'custom-css',
        // Dealer Settings pages
        'dealer-settings',
        'dealer-settings-hours',
        'dealer-settings-labels',
        'dealer-settings-contact',
        'dealer-settings-used_finance_custom',
        'dealer-settings-listing',
        'dealer-settings-socialmedia',
        'dealer-settings-disclaimer',
        'dealer-settings-filter',
        'dealer-settings-policies',
        'Backend login',
        'dealer-settings-web-info',
        'dealer-settings-showroom',
        'dealer-settings-my-garage',
        'dealer-settings-vdp-payment',
    );

    return in_array($page, $settings_pages, true);
}

class LeadboxSettings
{
  /**
   * Holds the values to be used in the fields callbacks
   */
  private $branding_options;
  private $hours_options;
  private $labels_options;
  private $my_garage_options;
  private $contact_options;
  private $listing_options;
  private $socialmedia_options;
  private $used_finance_options;
  private $used_finance_custom_options;
  private $disclaimer_options;
  private $filter_options;
  private $iboost_options;
  private $policies_options;
  private $hour_range_options;
  private $font_size_range_options;
  private $newsletter_options;
  private $vdp_payment_options;

  /**
   * Start up
   */
  public function __construct()
  {

		require_once __DIR__ . '/functions.php';

    $this->hour_range_options = array(
      '6:30am',
      '7:00am',
      '7:30am',
      '8:00am',
      '8:30am',
      '9:00am',
      '9:30am',
      '10:00am',
      '10:30am',
      '11:00am',
      '11:30am',
      '12:00pm',
      '12:30pm',
      '1:00pm',
      '1:30pm',
      '2:00pm',
      '2:30pm',
      '3:00pm',
      '3:30pm',
      '4:00pm',
      '4:30pm',
      '5:00pm',
      '5:30pm',
      '6:00pm',
      '6:30pm',
      '7:00pm',
      '7:30pm',
      '8:00pm',
      '8:30pm',
      '9:00pm',
      '9:30pm',
      '10:00pm',
      '10:30pm',
      '11:00pm'
    );

    $this->font_size_range_options = '
    <option value="20px">20px</option>
    <option value="18px">18px</option>
    <option value="16px">16px</option>
    <option value="14px">14px</option>
    <option value="12px">12px</option>
    <option value="10px">10px</option>';

    $this->provinces_options = array('AB','BC','MB','NB','NL','NS','ON','PE','QC','SK','NT','NU','YT');

    $this->oem_program_options = array('Leadbox','Ford','FCA','JLR','Toyota','Lexus','GM','Stellantis');

    // Menu registration - must run on all admin pages
    add_action('admin_menu', array($this, 'add_dealer_menu'));
    add_action('admin_menu', array($this, 'add_leadbox_menu'));
    add_action('admin_menu', array($this, 'add_css_custom'));
    // LBT-1462: LBX Listing Images as its own top-level menu. Priority 11 so it
    // registers after Dealer Settings / Leadbox Settings and lands right after them.
    add_action('admin_menu', array($this, 'add_listing_images_menu'), 11);

    // Settings registration - only on settings pages (performance optimization)
    add_action('admin_init', array($this, 'maybe_register_settings'));

    // Scripts - only enqueue on settings pages
    add_action('admin_enqueue_scripts', array($this, 'enqueue_used_finance_scripts'));
    add_action('admin_enqueue_scripts', array($this, 'enqueue_listing_images_scripts'));
    add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts'));

    // AJAX handlers - must always be registered
    add_action('wp_ajax_save_custom_finance_options', array($this, 'save_custom_finance_options'));
    add_action('wp_ajax_update_custom_finance_options', array($this, 'update_custom_finance_options'));
    add_action('wp_ajax_delete_finance_entry', array($this, 'delete_finance_entry'));
    add_action('wp_ajax_delete_selected_entries', array($this, 'delete_selected_entries'));
    // LBT-1462 - listing images repeater
    add_action('wp_ajax_save_listing_image', array($this, 'save_listing_image'));
    add_action('wp_ajax_update_listing_images', array($this, 'update_listing_images'));
    add_action('wp_ajax_delete_listing_image', array($this, 'delete_listing_image'));
    add_action('wp_ajax_delete_selected_listing_images', array($this, 'delete_selected_listing_images'));
    add_action('wp_ajax_save_listing_images_config', array($this, 'save_listing_images_config'));
    add_action('wp_ajax_set_data_google_sheet', array($this, 'set_data_google_sheet'));
    add_action('wp_ajax_save_json_file', array($this, 'save_json_file'));
    add_action('wp_ajax_save_json_option', array($this, 'save_json_option'));
    add_action('wp_ajax_get_genius_components', array($this, 'get_genius_components'));
  }

  /**
   * Conditionally register settings only when on Leadbox/Dealer settings pages
   * This optimization saves ~15-25ms on non-settings admin pages by avoiding
   * unnecessary calls to register_setting(), add_settings_section(), and add_settings_field()
   *
   * @return void
   */
  public function maybe_register_settings()
  {
    if (!leadbox_is_settings_page()) {
      return;
    }

    // Register all settings
    $this->register_branding_settings();
    $this->register_hours_settings();
    $this->register_labels_settings();
    $this->register_my_garage_settings();
    $this->register_used_finance_settings();
    $this->register_used_finance_custom_settings();
    $this->register_web_info_settings();
    $this->register_contact_settings();
    $this->register_listing_settings();
    $this->register_socialmedia_settings();
    $this->register_disclaimer_settings();
    $this->register_filter_settings();
    $this->register_iboost_settings();
    $this->register_policies_settings();
    $this->register_vdp_payment_settings();
    $this->register_leadbox_settings();
    $this->register_custom_css();
    $this->register_showroom_settings();
  }

  /**
   * Add options page
   */
  public function add_css_custom()
  {
    global $_wp_last_object_menu;

    $_wp_last_object_menu++;

    add_menu_page(
      'Custom CSS',
      'Custom CSS',
      'manage_options',
      'custom-css',
      array($this, 'create_custom_css_page'),
      'dashicons-admin-settings',
      $_wp_last_object_menu
    );
  }

  public function add_leadbox_menu()
  {
    global $_wp_last_object_menu;

    $_wp_last_object_menu++;

    add_menu_page(
      'Leadbox Settings',
      'Leadbox Settings',
      'leadbox_settings',
      'leadbox-settings',
      array($this, 'create_leadbox_settings_page'),
      'dashicons-admin-settings',
      $_wp_last_object_menu
    );

    add_submenu_page(
      'leadbox-settings',
      __('Genius', 'leadbox-settings'),
      __('Genius', 'leadbox-settings'),
      'leadbox_settings',
      'leadbox-settings-genius',
      array($this, 'create_leadbox_settings_genius_page'),
    );

    add_submenu_page(
      'leadbox-settings',
      __('Failed Leads', 'leadbox-settings'),
      __('Failed Leads', 'leadbox-settings'),
      'leadbox_settings',
      'leadbox-settings-leads-sent',
      array($this, 'create_leadbox_settings_leads_sent_page'),
    );

    add_submenu_page(
      'leadbox-settings',
      __('Load Dealer Settings', 'leadbox-settings'),
      __('Load Dealer Settings', 'leadbox-settings'),
      'leadbox_settings',
      'leadbox-settings-load-dealer-settings',
      array($this, 'create_leadbox_settings_load_dealer_settings'),
    );

    add_submenu_page(
      'leadbox-settings',
      __('Error Logs', 'leadbox-settings'),
      __('Error Logs', 'leadbox-settings'),
      'manage_options',
      'leadbox-logs',
      array($this, 'create_leadbox_logs_page'),
    );

    add_menu_page(
      'Menus',
      'Menus',
      'menus',
      'nav-menus.php',
      '',
      'dashicons-menu',
      $_wp_last_object_menu
    );

    add_menu_page(
      'Widgets',
      'Widgets',
      'widgets',
      'widgets.php',
      '',
      'dashicons-admin-generic',
      $_wp_last_object_menu
    );
  }

  // LBT-1462: top-level "LBX Listing Images" menu, at the same level as Dealer
  // Settings and Leadbox Settings. Registered at admin_menu priority 11 so it is
  // placed after those two. The slug is kept as `dealer-settings-listing` so the
  // page callback, AJAX and enqueue hook keep matching.
  public function add_listing_images_menu()
  {
    global $_wp_last_object_menu;

    $_wp_last_object_menu++;

    add_menu_page(
      __('LBX Listing Images', 'dealer-settings'),
      __('LBX Listing Images', 'dealer-settings'),
      'manage_options',
      'dealer-settings-listing',
      array($this, 'create_listing_image_page'),
      'dashicons-images-alt2',
      $_wp_last_object_menu
    );
  }


  /**
   * Options page callback
   */

  public function create_custom_css_page()
  {
    // Set class property
    $this->custom_css = get_option('custom-css');
    ?>
    <div class="wrap">
      <h1>Custom CSSs</h1>
      <p style="font-size: 14px;color: red; font-style: oblique;">For advanced users only. Adjusting css may cause unintended layout changes. Leadbox is not able to support any css dealer may place in this area.</p>
      <form method="post" action="options.php">
        <?php

        settings_fields('custom-css-options-group');
        do_settings_sections('custom-css');
        submit_button();

        ?>
      </form>
    </div>
  <?php
  }

  public function create_leadbox_settings_page()
  {
    // Set class property
    $this->leadbox_settings = get_option('leadbox-settings');
    ?>
    <div class="wrap">
      <h1>Leadbox Settings</h1>
      <form method="post" action="options.php">
        <?php

        settings_fields('leadbox-settings-options-group');
        do_settings_sections('leadbox-settings');
        submit_button();

        ?>
      </form>
    </div>
  <?php
  }

  public function create_leadbox_settings_genius_page()
  {
    // Set class property
    $this->leadbox_settings = get_option('leadbox-settings');
    ?>
  <link rel="stylesheet" type="text/css" href="<?=plugin_dir_url(__FILE__)?>/addons/toastify.min.css">
  <script type="text/javascript" src="<?=plugin_dir_url(__FILE__)?>/addons/toastify-js.js"></script>
  <div id="saving-backdrop" style="display:none;">
      <div id="saving-message">
          <p>Saving file...</p>
      </div>
  </div>

  <style>
      #saving-backdrop {
          position: fixed;
          top: 0;
          left: 0;
          width: 100%;
          height: 100%;
          background-color: rgba(0, 0, 0, 0.5);
          z-index: 9999;
          display: flex;
          align-items: center;
          justify-content: center;
      }

      #saving-message {
          background-color: white;
          padding: 20px;
          border-radius: 5px;
          box-shadow: 0 0 10px rgba(0, 0, 0, 0.25);
      }

/* Modal Styles */
        .modal {
            display: none;
            position: fixed;
            z-index: 1;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            overflow: auto;
            background-color: rgb(0,0,0);
            background-color: rgba(0,0,0,0.4);
        }
        .modal-content {
            background-color: #fefefe;
            margin: 15% auto;
            padding: 20px;
            border: 1px solid #888;
            width: 80%;
            max-width: 500px;
            border-radius: 10px;
        }
        .close {
            color: #aaa;
            float: right;
            font-size: 28px;
            font-weight: bold;
        }
        .close:hover,
        .close:focus {
            color: black;
            text-decoration: none;
            cursor: pointer;
        }
        .modal-header, .modal-footer {
            padding: 10px;
            text-align: center;
        }
        .modal-body {
            padding: 10px 20px;
        }
        .btn {
            background-color: #4CAF50;
            color: white;
            padding: 10px 20px;
            margin: 10px 0;
            border: none;
            cursor: pointer;
            border-radius: 5px;
        }
        .btn:hover {
            background-color: #45a049;
        }

        @font-face {
          font-family: "Monaspace Krypton Light";
          src: url("<?=plugin_dir_url(__FILE__)?>/fonts/MonaspaceKrypton-Light.woff");
        }
        /* ---- Genius editor layout ---- */
        .genius-toolbar { display:flex; align-items:center; gap:8px; margin:12px 0; flex-wrap:wrap; }
        .genius-toolbar .genius-hint { color:#646970; font-size:12px; margin-left:4px; }
        #genius-status { font-weight:600; }
        #genius-status.is-error { color:#b32d2e; }
        #genius-status.is-ok { color:#1a7f37; }

        .genius-layout { display:grid; grid-template-columns: minmax(0, 1fr) 380px; gap:16px; align-items:start; }
        @media (max-width: 1200px) { .genius-layout { grid-template-columns: 1fr; } }

        #json-editor { height:640px; width:100%; border:1px solid #1e1e1e; border-radius:8px; overflow:hidden; }
        #json-editor.genius-fallback { padding:0; }
        #json-editor textarea.genius-fallback-area { width:100%; height:640px; box-sizing:border-box; border:0; padding:12px; font-family:"Monaspace Krypton Light", Menlo, Consolas, monospace; font-size:13px; line-height:1.4; resize:none; }

        .genius-sidebar { background:#fff; border:1px solid #e2e4e7; border-radius:8px; max-height:640px; display:flex; flex-direction:column; overflow:hidden; }
        .genius-sidebar-head { padding:12px; border-bottom:1px solid #eee; }
        .genius-sidebar-head h2 { margin:0 0 8px; font-size:13px; text-transform:uppercase; letter-spacing:.04em; color:#1d2327; }
        .genius-sidebar-head input { width:100%; box-sizing:border-box; }

        .genius-filters { display:flex; gap:6px; padding:10px 12px; border-bottom:1px solid #eee; flex-wrap:wrap; }
        .genius-chip { display:inline-flex; align-items:center; gap:6px; border:1px solid #c3c4c7; background:#f6f7f7; color:#1d2327; border-radius:999px; padding:3px 10px; font-size:12px; cursor:pointer; line-height:1.6; }
        .genius-chip.is-active { background:#2271b1; border-color:#2271b1; color:#fff; }
        .genius-count { background:rgba(0,0,0,.12); border-radius:999px; padding:0 6px; font-size:11px; }
        .genius-chip.is-active .genius-count { background:rgba(255,255,255,.25); }

        .genius-list { overflow:auto; padding:8px; flex:1; }
        .genius-card { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:8px 10px; border:1px solid #e2e4e7; border-radius:8px; margin-bottom:6px; cursor:pointer; transition:border-color .15s, box-shadow .15s; }
        .genius-card:hover { border-color:#2271b1; box-shadow:0 1px 4px rgba(0,0,0,.08); }
        .genius-card-main { min-width:0; flex:1; }
        .genius-card-name { font-weight:600; font-size:13px; color:#1d2327; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
        .genius-card-ver { font-size:12px; color:#646970; margin-top:2px; display:flex; align-items:center; gap:5px; }
        .genius-card-ver .dot { opacity:.55; }
        .genius-card-ver .count { color:#646970; }
        .genius-card-ver .using { color:#1d2327; font-weight:600; }
        .genius-card-right { display:flex; flex-direction:column; align-items:flex-end; gap:5px; }
        .genius-badges { display:flex; gap:4px; flex-wrap:wrap; justify-content:flex-end; }
        .genius-badge { font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.03em; border-radius:4px; padding:2px 6px; white-space:nowrap; }
        .genius-badge.custom { background:#e6f0fb; color:#1a5fb4; }
        .genius-badge.missing { background:#fbe6e6; color:#b32d2e; }
        .genius-version-select { font-size:12px; max-width:90px; }
        .genius-empty { color:#646970; padding:12px; text-align:center; }
  </style>

      <div class="wrap">
        <h1>Edit Genius Config</h1>

        <div class="genius-toolbar">
          <button id="save-json" class="button button-primary">Save Genius configuration</button>
          <button id="format-json" class="button button-secondary">Format JSON</button>
          <span class="genius-hint">Press &#8984;/Ctrl + S to save</span>
          <span id="genius-status" class="genius-hint"></span>
        </div>

        <div class="genius-layout">
          <div id="json-editor"></div>

          <aside class="genius-sidebar">
            <div class="genius-sidebar-head">
              <h2>Components</h2>
              <input type="text" id="searchInput" placeholder="Search component…">
            </div>
            <div class="genius-filters">
              <button type="button" class="genius-chip is-active" data-filter="all">All <span class="genius-count" data-count="all">0</span></button>
              <button type="button" class="genius-chip" data-filter="custom">Custom <span class="genius-count" data-count="custom">0</span></button>
              <button type="button" class="genius-chip" data-filter="missing">Not in JSON <span class="genius-count" data-count="missing">0</span></button>
            </div>
            <div id="componentList" class="genius-list">
              <p class="genius-empty">Loading components…</p>
            </div>
          </aside>
        </div>

        <textarea id="json-content" name="json_content" style="display: none;"></textarea>

        <!-- Modal Structure -->
        <div id="myModal" class="modal">
            <div class="modal-content">
                <div class="modal-header">
                    <span class="close">&times;</span>
                    <h2>Information</h2>
                </div>
                <div id="modal-body" class="modal-body">
                    <!-- Dynamic content will be injected here -->
                </div>
                <div class="modal-footer">
                    <button id="close-modal-button" class="btn">Close</button>
                </div>
            </div>
        </div>

      </div>
    <?php
  }

  public function create_leadbox_settings_load_dealer_settings()
  {
    ?>
    <style>
    .file-upload-wrapper {
        position: relative;
        margin-bottom: 15px;
    }
    .file-upload-label {
        display: inline-block;
        padding: 8px 15px;
        background: #2271b1;
        color: #fff;
        border-radius: 3px;
        cursor: pointer;
        transition: background 0.3s;
    }
    .file-upload-label:hover {
        background: #135e96;
    }
    .file-upload-input {
        position: absolute;
        left: 0;
        top: 0;
        opacity: 0;
        width: 100%;
        height: 100%;
        cursor: pointer;
    }
    .file-name {
        margin-left: 10px;
        color: #555;
    }

    .button-green {
      background: #4CAF50 !important;
      border-color: #46b450 !important;
      color: #fff !important;
      text-shadow: none !important;
      box-shadow: 1px 2px 3px black !important;
    }
    .button-green:hover {
      background: #3d8b40 !important;
      border-color: #367a39 !important;
    }
    </style>

    <div class="wrap">
        <h1 style="font-weight: bold;margin-bottom: 10px;">Load Dealer Settings</h1>

        <form method="post" enctype="multipart/form-data">
            <?php wp_nonce_field('upload_dealer_json', 'dealer_json_nonce'); ?>
            
            <div class="file-upload-wrapper">
                <label class="file-upload-label">
                    Select JSON file
                    <input type="file" name="dealer_json_file" accept=".json" class="file-upload-input">
                </label>
                <span class="file-name">No file selected</span>
            </div>
            
            <input type="submit" name="upload_dealer_json" value="Upload JSON file" class="button button-green">
        </form>

        <script>
            document.querySelector('.file-upload-input').addEventListener('change', function(e) {
                const fileName = e.target.files[0] ? e.target.files[0].name : 'No file selected';
                document.querySelector('.file-name').textContent = fileName;
            });
        </script>
        <?php $this->handle_json_upload(); ?>
    </div>
    <?php
  }

  public function handle_json_upload() {
    if (isset($_POST['upload_dealer_json'])) {
        if (!isset($_FILES['dealer_json_file']) || empty($_FILES['dealer_json_file']['tmp_name'])) {
            echo '<div class="notice notice-error"><p>No file was selected.</p></div>';
            return;
        }

        if (!wp_verify_nonce($_POST['dealer_json_nonce'], 'upload_dealer_json')) {
            echo '<div class="notice notice-error"><p>Nonce invalid.</p></div>';
            return;
        }

        $uploaded_file = $_FILES['dealer_json_file'];
        $upload_dir = WP_CONTENT_DIR . '/uploads/';
        $destination = $upload_dir . 'dealer_settings.json';

        if (move_uploaded_file($uploaded_file['tmp_name'], $destination)) {
          $return = $this->update_dealer_settings($destination);
      
          if ($return !== false) {
              echo '<div class="notice notice-success"><p>JSON file uploaded successfully.</p></div>';
              echo $return;
          } else {
              echo '<div class="notice notice-error"><p>Error processing JSON settings.</p></div>';
          }
      } else {
          echo '<div class="notice notice-error"><p>Error uploading the file.</p></div>';
      }
      
    }
  }

  public function isValidTime($time) {
    return preg_match('/^(?:0?[1-9]|1[0-2]):[0-5][0-9](?:am|pm)$/', $time) === 1;
  }

  public function update_dealer_settings($file_path)
  {
    if (!file_exists($file_path)) {
      echo '<div class="notice notice-error"><p>JSON file not found.</p></div>';
      return false;
    }

    $json_data = file_get_contents($file_path);
    $settings = json_decode($json_data, true);

    if (json_last_error() !== JSON_ERROR_NONE) {
      echo '<div class="notice notice-error"><p>JSON format error: ' . json_last_error_msg() . '</p></div>';
      return false;
    }

    // Validar estado de horario de servicio
    $valid_statuses = ['Enabled', 'Disabled'];
    $service_status = $settings['hours']['service']['status'] ?? 'Enabled';

    if (!in_array($service_status, $valid_statuses, true)) {
      echo '<div class="notice notice-error"><p>Invalid service status: must be "Enabled" or "Disabled".</p></div>';
      return false;
    }

    // Validar estado de horario de parts
    $parts_status = $settings['hours']['parts']['status'] ?? 'Enabled';
    if (!in_array($parts_status, $valid_statuses, true)) {
      echo '<div class="notice notice-error"><p>Invalid parts status: must be "Enabled" or "Disabled".</p></div>';
      return false;
    }

    // Validar estado de horario de additional_hours_1
    $additional_hours_1_status = $settings['hours']['additional_hours_1']['status'] ?? 'Enabled';
    if (!in_array($additional_hours_1_status, $valid_statuses, true)) {
      echo '<div class="notice notice-error"><p>Invalid additional_hours_1 status: must be "Enabled" or "Disabled".</p></div>';
      return false;
    }

    // Validar estado de horario de additional_hours_2
    $additional_hours_2_status = $settings['hours']['additional_hours_2']['status'] ?? 'Enabled';
    if (!in_array($additional_hours_2_status, $valid_statuses, true)) {
      echo '<div class="notice notice-error"><p>Invalid additional_hours_2 status: must be "Enabled" or "Disabled".</p></div>';
      return false;
    }

    // Validar estado de horario de additional_hours_3
    $additional_hours_3_status = $settings['hours']['additional_hours_3']['status'] ?? 'Enabled';
    if (!in_array($additional_hours_3_status, $valid_statuses, true)) {
      echo '<div class="notice notice-error"><p>Invalid additional_hours_3 status: must be "Enabled" or "Disabled".</p></div>';
      return false;
    }

    // Guardar cada valor del JSON en las opciones de WordPress
    $contact_settings = get_option('dealer-settings-contact-options', []);
    $social_settings = get_option('dealer-settings-socialmedia-options', []);
    $dealer_settings = get_option('dealer-settings-branding-options', []);
    $leadbox_settings = get_option('leadbox-settings', []);
    $disclaimer_settings = get_option('dealer-settings-disclaimer-options', []);
    $hours_settings = get_option('dealer-settings-hours-options', []);

    /* Hours */
    $days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
    $sections = [
      'sales' => 'sale_hours',
      'service' => 'service_hours',
      'parts' => 'parts_hours',
      'additional_hours_1' => 'additionalone_hours',
      'additional_hours_2' => 'additionaltwo_hours',
      'additional_hours_3' => 'additionalthree_hours'
    ];

    foreach ($sections as $sectionKey => $prefix) {

      $nprefix = preg_replace('/_hours$/', '', $prefix);
      if (in_array($sectionKey, ['additional_hours_1', 'additional_hours_2', 'additional_hours_3'])) {
        $label = $settings['hours'][$sectionKey]['label'] ?? '';
        $label_fr = $settings['hours'][$sectionKey]['label_fr'] ?? '';
        $add_status = $settings['hours'][$sectionKey]['status'] ?? 'Disabled';

        $hours_settings["{$nprefix}"] = $add_status;
        $hours_settings["{$nprefix}label"] = $label;
        $hours_settings["{$nprefix}labelfr"] = $label_fr;
      } 

      foreach ($days as $day) {
        $isClosed = $settings['hours'][$sectionKey][$day]['is_closed'] ?? '';
        $start = $settings['hours'][$sectionKey][$day]['start'] ?? '';
        $end = $settings['hours'][$sectionKey][$day]['end'] ?? '';

        

        if (!$isClosed) {
          if (!$this->isValidTime($start) || !$this->isValidTime($end)) {
            echo '<div class="notice notice-error"><p>Invalid time format for ' . ucfirst($day) . ' in ' . ucfirst($sectionKey) . '.</p></div>';
            return false;
          }
        }

        $hours_settings["{$prefix}_{$day}_start"] = $start;
        $hours_settings["{$prefix}_{$day}_end"] = $end;
        $hours_settings["{$prefix}_{$day}_closed"] = $isClosed;

      }
    }

    /* Contact Settings */
    $contact_settings['dealer_name'] = $settings['name'] ?? '';
    $contact_settings['dealer_url'] = $settings['url'] ?? '';
    $contact_settings['sale_phone'] = $settings['sale_phone'] ?? '';
    $contact_settings['service_phone'] = $settings['service_phone'] ?? '';
    $contact_settings['parts_phone'] = $settings['parts_phone'] ?? '';
    $contact_settings['collision_phone'] = $settings['collision_phone'] ?? '';
    $contact_settings['accessories_phone'] = $settings['accessories_phone'] ?? '';
    $contact_settings['fax'] = $settings['fax'] ?? '';
    $contact_settings['sms'] = $settings['sms'] ?? '';
    $contact_settings['body_shop'] = $settings['body_shop_phone'] ?? '';
    $contact_settings['primary_email'] = $settings['primary_email'] ?? '';
    $contact_settings['secondary_email'] = $settings['secondary_email'] ?? '';
    $contact_settings['address_line_1'] = $settings['address_line_1'] ?? '';
    $contact_settings['address_line_2'] = $settings['address_line_2'] ?? '';
    $contact_settings['address_city'] = $settings['address_city'] ?? '';
    $contact_settings['address_province'] = $settings['address_province'] ?? '';
    $contact_settings['address_postal_code'] = $settings['address_postal_code'] ?? '';
    $contact_settings['address_url_map_iframe'] = $settings['address_url_map'] ?? '';
    $contact_settings['address_timezone'] = $settings['time_zone'] ?? '';

    /* Social Media */
    $social_settings['facebook_socialmedia'] = $settings['social_media']['facebook'] ?? '';
    $social_settings['twitter_socialmedia'] = $settings['social_media']['twitter'] ?? '';
    $social_settings['instagram_socialmedia'] = $settings['social_media']['instagram'] ?? '';
    $social_settings['pinterest_socialmedia'] = $settings['social_media']['pinterest'] ?? '';
    $social_settings['youtube_socialmedia'] = $settings['social_media']['youtube'] ?? '';
    $social_settings['linkedin_socialmedia'] = $settings['social_media']['linkedin'] ?? '';
    $social_settings['tiktok_socialmedia'] = $settings['social_media']['tiktok'] ?? '';

    /* Dealer Settings */
    $dealer_settings['finance_frequency'] = $settings['finance_frequency'] ?? '';
    $dealer_settings['lease_frequency'] = $settings['lease_frequency'] ?? '';
    $dealer_settings['vehicle_count_option'] = $settings['vehicle_count_option'] ?? '';
    $dealer_settings['newsletter_enabled_option'] = $settings['newsletter_footer_form'] ?? '';

    /* Leadbox Settings */
    $leadbox_settings['manufacturer'] = $settings['manufacturer'] ?? '';
    $leadbox_settings['other_brands'] = $settings['other_brands_seo'] ?? '';
    $leadbox_settings['all_brands'] = $settings['other_brands_lineup'] ?? '';
    $leadbox_settings['oem_program'] = $settings['oem_programs'] ?? '';
    $leadbox_settings['oem_models'] = $settings['oem_models'] ?? '';

    /* Disclaimers */
    $disclaimer_settings['disclaimer_new'] = $settings['vdp_disclaimers']['new'] ?? '';
    $disclaimer_settings['disclaimer_used'] = $settings['vdp_disclaimers']['used'] ?? '';
    /*     
      $dealer_settings['oem_program'] = $settings['srp_disclaimers']['new'] ?? '';
      $dealer_settings['oem_program'] = $settings['srp_disclaimers']['used'] ?? ''; 
    */

    update_option('dealer-settings-contact-options', $contact_settings);
    update_option('dealer-settings-socialmedia-options', $social_settings);
    update_option('dealer-settings-branding-options', $dealer_settings);
    update_option('leadbox-settings', $leadbox_settings);
    update_option('dealer-settings-disclaimer-options', $disclaimer_settings);
    update_option('dealer-settings-hours-options', $hours_settings);

    return '<div class="notice notice-success"><p>Settings updated correctly.</p></div>';
  }


  public function create_leadbox_settings_leads_sent_page()
  {
      global $wpdb;
      $table_name = $wpdb->prefix . 'leadbox_leads';

      // Obtener los registros
      $leads = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC");

      ?>
      <link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
      <div class="wrap">
          <h1 style="font-weight: bold;margin-bottom: 10px;">Failed Leads</h1>

          <table id="leadsTable" class="widefat fixed display" cellspacing="0" width="100%">
              <thead>
                  <tr>
                      <th width="10%">ID</th>
                      <th width="5%">Form ID</th>
                      <th width="5%">NF ID</th>
                      <th width="20%">Lead Data</th>
                      <th width="10%">Retry Count</th>
                      <th width="20%">LBX Lead ID</th>
                      <th width="15%">Created At</th>
                      <th width="15%">Sent At</th>
                  </tr>
              </thead>
              <tbody>
                  <?php if (!empty($leads)) : ?>
                      <?php foreach ($leads as $index => $lead) : ?>
                          <tr class="<?php echo ($index % 2 == 0) ? 'alternate' : ''; ?> <?php echo $lead->lbx_lead_id == NULL ? 'red' : '' ?>">
                              <td><?php echo esc_html($lead->id); ?></td>
                              <td><?php echo esc_html($lead->form_id); ?></td>
                              <td><?php echo esc_html($lead->nf_id); ?></td>
                              <td>
                                <button class="view-json-btn" data-json="<?php echo esc_attr($lead->lead_data); ?>">
                                  <?php echo esc_html(substr($lead->lead_data, 0, 100)) . '...'; ?>
                                </button>
                              </td>
                              <td><?php echo esc_html($lead->retry_count); ?></td>
                              <td><?php echo esc_html($lead->lbx_lead_id ?: 'N/A'); ?></td>
                              <td><?php echo esc_html($lead->created_at); ?></td>
                              <td><?php echo esc_html($lead->sent_at ?: 'Pending'); ?></td>
                          </tr>
                      <?php endforeach; ?>
                  <?php endif; ?>
              </tbody>
          </table>

          <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
          <script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
      </div>

      <!-- Modal -->
      <div id="json-modal" class="modal">
          <div class="modal-content">
              <span class="close">&times;</span>
              <pre id="json-content"></pre>
          </div>
      </div>

      <style>
          .red {
            background-color: #ffcccc !important;
          }
          .wrap {
              max-width: 100%;
              overflow-x: auto;
          }
          .widefat th {
              background:rgb(135, 217, 255);
              color: white;
              text-align: left;
              padding: 10px;
              border: 1px solid #f1f1f1;
              font-weight: bold;
          }
          .widefat td {
              padding: 10px;
              border: 1px solid #f1f1f1;
          }
          .alternate {
              background: #f9f9f9;
          }
          button.view-json-btn {
              background: none;
              border: none;
              color: #0073aa;
              text-decoration: underline;
              cursor: pointer;
              font-size: 14px;
              display: contents;
          }
          button.view-json-btn:hover {
              color: #005177;
          }
          /* Estilos del modal */
          .modal {
              display: none;
              position: fixed;
              z-index: 1000;
              left: 0;
              top: 0;
              width: 100%;
              height: 100%;
              background-color: rgba(0, 0, 0, 0.5);
          }
          .modal-content {
              background-color: white;
              margin: 10% auto;
              padding: 20px;
              border-radius: 5px;
              width: 50%;
              max-height: 70vh;
              overflow-y: auto;
              position: relative;
          }
          .close {
              position: absolute;
              top: 10px;
              right: 15px;
              font-size: 24px;
              cursor: pointer;
          }
          pre {
              white-space: pre-wrap;
              word-wrap: break-word;
              font-size: 14px;
              background: #f4f4f4;
              padding: 10px;
              border-radius: 5px;
              overflow-x: auto;
          }
          .dataTables_wrapper .dataTables_length select {
            width: 60px;
          }
      </style>

      <script>
          document.addEventListener("DOMContentLoaded", function () {
              const modal = document.getElementById("json-modal");
              const modalContent = document.getElementById("json-content");
              const closeModal = document.querySelector(".close");

              document.querySelectorAll(".view-json-btn").forEach(button => {
                  button.addEventListener("click", function () {
                      const jsonData = this.getAttribute("data-json");
                      try {
                          const formattedJson = JSON.stringify(JSON.parse(jsonData), null, 4);
                          modalContent.textContent = formattedJson;
                      } catch (error) {
                          modalContent.textContent = "Invalid JSON Data";
                      }
                      modal.style.display = "block";
                  });
              });

              closeModal.addEventListener("click", function () {
                  modal.style.display = "none";
              });

              window.addEventListener("click", function (event) {
                  if (event.target === modal) {
                      modal.style.display = "none";
                  }
              });
          });

          jQuery(document).ready(function($) {
            $('#leadsTable').DataTable({
                "paging": true,
                "pageLength": 20,
                "ordering": true,
                "order": [[0, "asc"]],
                "lengthMenu": [20, 40, 60, 100],
                language: {
                  emptyTable: "No leads found."
                }
            });
          });
      </script>

      <?php
  }

  public function create_leadbox_logs_page()
  {
      global $wpdb;
      $table_name = $wpdb->prefix . 'leadbox_logs';

      // Check if database logging is enabled
      $db_logging_enabled = defined('LEADBOX_LOG_TO_DATABASE') && LEADBOX_LOG_TO_DATABASE;

      // Get logs if database logging is enabled
      $logs = array();
      if ($db_logging_enabled && $wpdb->get_var("SHOW TABLES LIKE '$table_name'") === $table_name) {
          $logs = $wpdb->get_results(
              "SELECT * FROM $table_name ORDER BY timestamp DESC LIMIT 100",
              ARRAY_A
          );
      }

      ?>
      <link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
      <div class="wrap">
          <h1 style="font-weight: bold;margin-bottom: 10px;">Leadbox Error Logs</h1>

          <?php if (!$db_logging_enabled): ?>
              <div class="notice notice-info">
                  <p><strong>Database logging is disabled.</strong></p>
                  <p>Errors are currently being logged to the WordPress debug log only.</p>
                  <p>To enable database logging, add this to your <code>wp-config.php</code>:</p>
                  <pre>define('LEADBOX_LOG_TO_DATABASE', true);</pre>
                  <p><strong>Note:</strong> Database logging is opt-in and adds 2-5ms overhead per error. Only enable when debugging specific issues.</p>
              </div>
          <?php elseif (empty($logs)): ?>
              <div class="notice notice-success">
                  <p><strong>No errors logged.</strong></p>
                  <p>Database logging is enabled but no errors have been recorded yet.</p>
              </div>
          <?php else: ?>
              <table id="logsTable" class="widefat fixed display" cellspacing="0" width="100%">
                  <thead>
                      <tr>
                          <th width="15%">Timestamp</th>
                          <th width="10%">Level</th>
                          <th width="35%">Message</th>
                          <th width="15%">Request ID</th>
                          <th width="10%">User ID</th>
                          <th width="15%">Context</th>
                      </tr>
                  </thead>
                  <tbody>
                      <?php foreach ($logs as $index => $log): ?>
                          <tr class="<?php echo ($index % 2 == 0) ? 'alternate' : ''; ?>">
                              <td><?php echo esc_html($log['timestamp']); ?></td>
                              <td>
                                  <span class="log-level log-level-<?php echo esc_attr(strtolower($log['level'])); ?>">
                                      <?php echo esc_html($log['level']); ?>
                                  </span>
                              </td>
                              <td><?php echo esc_html($log['message']); ?></td>
                              <td><code><?php echo esc_html($log['request_id']); ?></code></td>
                              <td><?php echo esc_html($log['user_id'] ?: 'N/A'); ?></td>
                              <td>
                                  <?php if (!empty($log['context'])): ?>
                                      <button class="view-context-btn" data-context="<?php echo esc_attr($log['context']); ?>">
                                          View Context
                                      </button>
                                  <?php else: ?>
                                      <em>None</em>
                                  <?php endif; ?>
                              </td>
                          </tr>
                      <?php endforeach; ?>
                  </tbody>
              </table>
          <?php endif; ?>

          <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
          <script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
      </div>

      <!-- Modal for context -->
      <div id="context-modal" class="modal">
          <div class="modal-content">
              <span class="close">&times;</span>
              <h2>Log Context</h2>
              <pre id="context-content"></pre>
          </div>
      </div>

      <style>
          .wrap {
              max-width: 100%;
              overflow-x: auto;
          }
          .widefat th {
              background: rgb(135, 217, 255);
              color: white;
              text-align: left;
              padding: 10px;
              border: 1px solid #f1f1f1;
              font-weight: bold;
          }
          .widefat td {
              padding: 10px;
              border: 1px solid #f1f1f1;
          }
          .alternate {
              background: #f9f9f9;
          }
          .log-level {
              padding: 4px 8px;
              border-radius: 3px;
              font-weight: bold;
              font-size: 12px;
              display: inline-block;
          }
          .log-level-error {
              background: #dc3232;
              color: white;
          }
          .log-level-critical, .log-level-emergency {
              background: #8b0000;
              color: white;
          }
          .log-level-warning {
              background: #ffb900;
              color: black;
          }
          .log-level-info, .log-level-notice {
              background: #00a0d2;
              color: white;
          }
          .log-level-debug {
              background: #888;
              color: white;
          }
          button.view-context-btn {
              background: #0073aa;
              border: none;
              color: white;
              padding: 5px 10px;
              border-radius: 3px;
              cursor: pointer;
              font-size: 12px;
          }
          button.view-context-btn:hover {
              background: #005177;
          }
          .modal {
              display: none;
              position: fixed;
              z-index: 1000;
              left: 0;
              top: 0;
              width: 100%;
              height: 100%;
              background-color: rgba(0, 0, 0, 0.5);
          }
          .modal-content {
              background-color: white;
              margin: 5% auto;
              padding: 20px;
              border: 1px solid #888;
              width: 80%;
              max-width: 800px;
              border-radius: 5px;
              max-height: 80vh;
              overflow-y: auto;
          }
          .close {
              color: #aaa;
              float: right;
              font-size: 28px;
              font-weight: bold;
              cursor: pointer;
          }
          .close:hover {
              color: black;
          }
          #context-content {
              background: #f5f5f5;
              padding: 15px;
              border-radius: 3px;
              overflow-x: auto;
          }
      </style>

      <script>
          document.addEventListener("DOMContentLoaded", function () {
              const modal = document.getElementById("context-modal");
              const modalContent = document.getElementById("context-content");
              const closeModal = document.querySelector(".close");

              document.querySelectorAll(".view-context-btn").forEach(button => {
                  button.addEventListener("click", function () {
                      const contextData = this.getAttribute("data-context");
                      try {
                          const formattedContext = JSON.stringify(JSON.parse(contextData), null, 4);
                          modalContent.textContent = formattedContext;
                      } catch (error) {
                          modalContent.textContent = contextData;
                      }
                      modal.style.display = "block";
                  });
              });

              if (closeModal) {
                  closeModal.addEventListener("click", function () {
                      modal.style.display = "none";
                  });
              }

              window.addEventListener("click", function (event) {
                  if (event.target === modal) {
                      modal.style.display = "none";
                  }
              });
          });

          jQuery(document).ready(function($) {
              if ($('#logsTable').length) {
                  $('#logsTable').DataTable({
                      "paging": true,
                      "pageLength": 25,
                      "ordering": true,
                      "order": [[0, "desc"]],
                      "lengthMenu": [25, 50, 100],
                      language: {
                          emptyTable: "No logs found."
                      }
                  });
              }
          });
      </script>

      <?php
  }


  public function enqueue_scripts($hook)
  {
    if ($hook != 'leadbox-settings_page_leadbox-settings-genius') {
      return;
    }

    $genius_json = '';
    if(hasChild())
      $genius_json = get_stylesheet_directory_uri() . '/config/genius.json';
    else
      $genius_json = get_template_directory_uri() . '/resources/config/genius.json';

    // Modern JSON editor (Monaco, the VS Code engine) loaded from CDN.
    $monaco_vs = 'https://cdn.jsdelivr.net/npm/monaco-editor@0.52.2/min/vs';

    $js_path = plugin_dir_path(__FILE__) . 'edit-json-plugin.js';
    $js_version = file_exists($js_path) ? filemtime($js_path) : null;

    wp_enqueue_script('monaco-loader', $monaco_vs . '/loader.js', array(), '0.52.2', true);
    // Monaco's AMD loader sets a global define.amd, which makes WordPress UMD
    // libraries (underscore "_", backbone) register as AMD modules instead of
    // creating their globals — breaking the WP media/backbone stack on this page.
    // Stash Monaco's require/define immediately and remove the globals so WP's
    // scripts load normally; edit-json-plugin.js restores them only while it
    // actually loads Monaco.
    wp_add_inline_script(
      'monaco-loader',
      'window.__leadboxMonacoAMD={require:window.require,define:window.define};window.require=undefined;window.define=undefined;',
      'after'
    );
    wp_enqueue_script('edit-json-plugin-script', plugin_dir_url(__FILE__) . 'edit-json-plugin.js', array('jquery', 'monaco-loader'), $js_version, true);
    wp_localize_script('edit-json-plugin-script', 'editJsonPlugin', array(
      'ajax_url'          => admin_url('admin-ajax.php'),
      'json_file_url'     => $genius_json,
      'monaco_vs'         => $monaco_vs,
      'components_action' => 'get_genius_components',
      'nonce'             => wp_create_nonce('leadbox_genius'),
    ));
  }

  public function save_json_file()
  {
    if (!current_user_can('manage_options')) {
      wp_die('You are not allowed to be here.');
    }
    check_ajax_referer('leadbox_genius', 'nonce');

    // Verificar que la acción viene de nuestra página específica
    if (isset($_POST['page']) && $_POST['page'] === 'leadbox-settings-genius') {
      $genius_json = '';
      if(hasChild())
        $genius_json = get_stylesheet_directory() . '/config/genius.json';
      else
        $genius_json = get_template_directory() . '/resources/config/genius.json';

      $json_content = stripslashes($_POST['json_content']);
      $file_path = $genius_json;

      if (file_put_contents($file_path, $json_content)) {
        wp_send_json_success('JSON file saved successfully.');
      } else {
        wp_send_json_error('Error to save JSON file.');
      }
    } else {
      wp_send_json_error('Action not allowed.');
    }
  }

  public function save_json_option()
  {
    if (!current_user_can('manage_options')) {
      wp_die('You are not allowed to be here.');
    }
    check_ajax_referer('leadbox_genius', 'nonce');

    // Verificar que la acción viene de nuestra página específica
    if (isset($_POST['page']) && $_POST['page'] === 'leadbox-settings-genius') {
      if (isset($_POST['json_content'])) {
        $json_content = sanitize_text_field($_POST['json_content']);

        // Obtener la opción actual
        $leadbox_settings = get_option('leadbox-settings', []);

        // Asegurarse de que es un array
        if (!is_array($leadbox_settings)) {
            $leadbox_settings = [];
        }

        // Agregar o actualizar la clave 'genius'
        $leadbox_settings['genius'] = $json_content;

        // Guardar la opción actualizada
        update_option('leadbox-settings', $leadbox_settings);

        // Responder con éxito
        wp_send_json_success();
      } else {
          // Responder con error
          wp_send_json_error();
      }
    } else {
      wp_send_json_error('Action not allowed.');
    }
  }

  /**
   * Resolve the active genius.json path (child theme overrides the parent).
   */
  private function get_genius_config_path()
  {
    if (hasChild()) {
      return get_stylesheet_directory() . '/config/genius.json';
    }
    return get_template_directory() . '/resources/config/genius.json';
  }

  /**
   * Read and decode a genius.json file. Always returns an array.
   */
  private function read_genius_json($path)
  {
    if (!$path || !file_exists($path)) {
      return array();
    }
    $decoded = json_decode(file_get_contents($path), true);
    return is_array($decoded) ? $decoded : array();
  }

  /**
   * Turn a component key into a readable label (kebab-case -> Title Case,
   * keeping known acronyms uppercase).
   */
  private function genius_component_label($key)
  {
    $acronyms = array(
      'vdp' => 'VDP', 'srp' => 'SRP', 'vin' => 'VIN',
      'cta' => 'CTA', 'rv'  => 'RV',  'cl'  => 'CL',
    );
    $parts = explode('-', $key);
    foreach ($parts as &$part) {
      $part = isset($acronyms[$part]) ? $acronyms[$part] : ucfirst($part);
    }
    unset($part);
    return implode(' ', $parts);
  }

  /**
   * Infer a JSON-schema primitive type from a PHP value.
   */
  private function genius_json_type($value)
  {
    if (is_bool($value)) {
      return 'boolean';
    }
    if (is_int($value) || is_float($value)) {
      return 'number';
    }
    if (is_array($value)) {
      if (empty($value)) {
        return 'array';
      }
      return array_keys($value) === range(0, count($value) - 1) ? 'array' : 'object';
    }
    return 'string';
  }

  /**
   * Scan the active theme for versioned Genius components and return both a
   * manifest (used to render the sidebar) and an auto-generated JSON schema
   * (used by the editor for validation + autocomplete).
   *
   * Versions are detected as numbered blade files: resources/views/{base}/{component}/{N}.blade.php
   * where {base} is "cl" (components) or "layouts" (page layouts).
   */
  public function get_genius_components()
  {
    if (!current_user_can('manage_options')) {
      wp_send_json_error('You are not allowed to be here.');
    }
    check_ajax_referer('leadbox_genius', 'nonce');

    $parent_views = get_template_directory() . '/resources/views';
    $child_views  = hasChild() ? get_stylesheet_directory() . '/views' : '';

    $bases = array('cl', 'layouts');

    $active_config = $this->read_genius_json($this->get_genius_config_path());
    $parent_config = $this->read_genius_json(get_template_directory() . '/resources/config/genius.json');

    $components = array();
    $seen = array();

    foreach ($bases as $base) {
      $base_dir = $parent_views . '/' . $base;
      if (!is_dir($base_dir)) {
        continue;
      }
      $dirs = glob($base_dir . '/*', GLOB_ONLYDIR);
      if (!is_array($dirs)) {
        continue;
      }
      foreach ($dirs as $dir) {
        $key = basename($dir);
        if (isset($seen[$key])) {
          continue; // first base wins (cl before layouts)
        }

        // Collect numeric blade versions inside this component folder.
        $versions = array();
        $blades = glob($dir . '/*.blade.php');
        if (is_array($blades)) {
          foreach ($blades as $file) {
            $name = basename($file, '.blade.php');
            if (ctype_digit($name)) {
              $versions[] = (int) $name;
            }
          }
        }
        if (empty($versions)) {
          continue; // not a versioned component (e.g. atomic, build-and-price)
        }
        sort($versions);
        $seen[$key] = true;

        // Current version configured for this dealer.
        $in_json = array_key_exists($key, $active_config);
        $current = null;
        if ($in_json) {
          $current = isset($active_config[$key]['version'])
            ? (int) $active_config[$key]['version']
            : 1;
        }

        // Custom = the child theme overrides this component with its own blades.
        $custom = false;
        if ($child_views) {
          $child_comp = $child_views . '/' . $base . '/' . $key;
          if (is_dir($child_comp)) {
            $child_blades = glob($child_comp . '/*.blade.php');
            $custom = is_array($child_blades) && !empty($child_blades);
          }
        }

        $components[] = array(
          'key'           => $key,
          'label'         => $this->genius_component_label($key),
          'group'         => $base,
          'current'       => $current,
          'available'     => array_values($versions),
          'custom'        => $custom,
          'missingInJson' => !$in_json,
        );
      }
    }

    usort($components, function ($a, $b) {
      return strcmp($a['label'], $b['label']);
    });

    $schema = $this->build_genius_schema($components, array($active_config, $parent_config));

    wp_send_json_success(array(
      'components' => $components,
      'schema'     => $schema,
    ));
  }

  /**
   * Build a JSON schema from the detected components.
   *
   * - version: enum of versions that physically exist on disk (exact).
   * - data:    known keys collected from existing configs (best-effort autocomplete).
   *
   * Unknown top-level keys are allowed on purpose: real configs contain
   * non-versioned keys (e.g. "comparison", "srp-title"), so flagging them
   * would produce false positives.
   */
  private function build_genius_schema($components, $configs)
  {
    $properties = array();

    foreach ($components as $comp) {
      $key = $comp['key'];

      // Collect known data keys across the provided configs (best-effort hints).
      $data_props = array();
      foreach ($configs as $config) {
        if (isset($config[$key]['data']) && is_array($config[$key]['data'])) {
          foreach ($config[$key]['data'] as $dk => $dv) {
            if (!isset($data_props[$dk])) {
              $data_props[$dk] = array('type' => $this->genius_json_type($dv));
            }
          }
        }
      }

      // Build the allowed version list from on-disk versions PLUS any version
      // already referenced in the configs (e.g. legitimately deployed "version": 0),
      // so the schema never flags a value that is actually live.
      $enum_values = $comp['available'];
      foreach ($configs as $config) {
        if (isset($config[$key]['version']) && is_scalar($config[$key]['version'])) {
          $enum_values[] = (int) $config[$key]['version'];
        }
      }
      $enum_values = array_values(array_unique($enum_values));
      sort($enum_values);

      // Accept both numeric and string version values to avoid false errors.
      $enum = array();
      foreach ($enum_values as $v) {
        $enum[] = $v;
        $enum[] = (string) $v;
      }

      $version_schema = array(
        'description' => 'Available versions: ' . implode(', ', $comp['available']),
        'enum'        => $enum,
      );

      $data_schema = array(
        'type'                 => 'object',
        'additionalProperties' => true,
      );
      if (!empty($data_props)) {
        $data_schema['properties'] = $data_props;
      }

      $properties[$key] = array(
        'type'       => 'object',
        'properties' => array(
          'version' => $version_schema,
          'data'    => $data_schema,
        ),
      );
    }

    return array(
      'type'                 => 'object',
      'properties'           => empty($properties) ? new stdClass() : $properties,
      'additionalProperties' => true,
    );
  }

  /**
   * Register and add settings
   */

  public function register_custom_css()
  {
    register_setting(
      'custom-css-options-group',
      'custom-css',
      array($this, 'sanitize')
    );

    add_settings_section(
      'css',
      '',
      array($this, 'print_section_info'),
      'custom-css'
    );

    add_settings_field(
      'custom_css',
      'Custom CSS',
      array($this, 'custom_css_callback'),
      'custom-css',
      'css'
    );
  }

  public function custom_css_callback()
  {
    printf(
      '<textarea id="custom_css" name="custom-css[custom_css]" rows="10" cols="70">%s</textarea>',
      isset($this->custom_css['custom_css']) ? esc_attr($this->custom_css['custom_css']) : ''
    );
  }


  public function register_leadbox_settings()
  {
    register_setting(
      'leadbox-settings-options-group',
      'leadbox-settings',
      array($this, 'sanitize')
    );

    add_settings_section(
      'dealer',
      'Dealer information',
      array($this, 'print_section_info'),
      'leadbox-settings'
    );

    add_settings_field(
      'manufacturer',
      'Manufacturer',
      array($this, 'manufacturer_callback'),
      'leadbox-settings',
      'dealer'
    );

    add_settings_field(
      'other-brands',
      'Other Brands (For SEO)',
      array($this, 'other_brands_callback'),
      'leadbox-settings',
      'dealer'
    );

    add_settings_field(
      'all-brands',
      'Other Brands (For Offers, Showroom, Lineup)',
      array($this, 'all_brands_callback'),
      'leadbox-settings',
      'dealer'
    );

    add_settings_field(
      'oem_models',
      'OEM Models (For Static Pages)',
      array($this, 'oem_models_callback'),
      'leadbox-settings',
      'dealer'
    );

    add_settings_field(
      'custom_lineup',
      'Line Up',
      array($this, 'lineup_callback'),
      'leadbox-settings',
      'dealer'
    );

    add_settings_field(
      'megamenu_lineup',
      'Megamenu Line Up',
      array($this, 'megamenu_lineup_callback'),
      'leadbox-settings',
      'dealer'
    );

    add_settings_field(
      'custom_trimselector',
      'Trim Selector',
      array($this, 'trimselector_callback'),
      'leadbox-settings',
      'dealer'
    );

    add_settings_field(
      'oem_program',
      'OEM Program',
      array($this, 'oem_program_callback'),
      'leadbox-settings',
      'dealer'
    );

    add_settings_field(
      'dealer_information',
      'Website Type',
      array($this, 'dealer_information_callback'),
      'leadbox-settings',
      'dealer'
    );

    add_settings_field(
      'model_e_setting',
      'Model E',
      array($this, 'model_e_callback'),
      'leadbox-settings',
      'dealer'
    );

    add_settings_section(
      'api',
      'Backend Connection',
      array($this, 'print_section_info'),
      'leadbox-settings'
    );

    add_settings_field(
      'leads_api_url',
      'Leads API URL',
      array($this, 'leads_api_url_callback'),
      'leadbox-settings',
      'api'
    );

    add_settings_field(
      'leads_api_token',
      'Leads API Token',
      array($this, 'leads_api_token_callback'),
      'leadbox-settings',
      'api'
    );

    add_settings_field(
      'inventory_api_url',
      'Inventory API URL',
      array($this, 'inventory_api_url_callback'),
      'leadbox-settings',
      'api'
    );

    add_settings_field(
      'inventory_api_token',
      'Inventory API Token',
      array($this, 'inventory_api_token_callback'),
      'leadbox-settings',
      'api'
    );

    // LBT-1468 — Leadbox Platform lead-intake routing.
    add_settings_field(
      'lead_intake_target',
      'Lead Intake Target',
      array($this, 'lead_intake_target_callback'),
      'leadbox-settings',
      'api'
    );

    // These two only apply when routing to the Platform; the 'lb-intake-endpoint-row'
    // class lets the target dropdown's inline JS hide them in 'legacy' mode.
    add_settings_field(
      'leadbox_os_lead_intake_url',
      'Leadbox Platform Lead Intake URL',
      array($this, 'leadbox_os_lead_intake_url_callback'),
      'leadbox-settings',
      'api',
      array('class' => 'lb-intake-endpoint-row')
    );

    add_settings_field(
      'leadbox_os_lead_intake_token',
      'Leadbox Platform Lead Intake Token',
      array($this, 'leadbox_os_lead_intake_token_callback'),
      'leadbox-settings',
      'api',
      array('class' => 'lb-intake-endpoint-row')
    );

    add_settings_section(
      'links',
      'Leadbox Links',
      array($this, 'print_section_info'),
      'leadbox-settings'
    );

    add_settings_field(
      'report_url',
      'Report URL',
      array($this, 'report_url_callback'),
      'leadbox-settings',
      'links'
    );

    add_settings_field(
      'credit_url',
      'Credit URL',
      array($this, 'credit_url_callback'),
      'leadbox-settings',
      'links'
    );

    add_settings_field(
      'backend_url',
      'Backend URL',
      array($this, 'backend_url'),
      'leadbox-settings',
      'links'
    );

    add_settings_field(
      'graphql_url',
      'GraphQL URL',
      array($this, 'graphql_url'),
      'leadbox-settings',
      'links'
    );

    add_settings_section(
      'google',
      'Google',
      array($this, 'print_section_info'),
      'leadbox-settings'
    );

    add_settings_field(
      'google_tag_manager_token',
      'Google Tag Manager Token',
      array($this, 'google_tag_manager_token_callback'),
      'leadbox-settings',
      'google'
    );

    add_settings_field(
      'google_analytics_id',
      'Google Analytics ID',
      array($this, 'google_analytics_id_callback'),
      'leadbox-settings',
      'google'
    );

    add_settings_section(
      'adobe',
      'Ford Adobe Tagging',
      array($this, 'print_section_info'),
      'leadbox-settings'
    );

    add_settings_field(
      'ford_adobe_option',
      'Status',
      array($this, 'ford_adobe_tagging_callback'),
      'leadbox-settings',
      'adobe'
    );

    add_settings_field(
      'ford_adobe_version',
      'Environment',
      array($this, 'ford_adobe_version_callback'),
      'leadbox-settings',
      'adobe'
    );

    add_settings_field(
      'ford_dealer_code',
      'Ford Dealer Code',
      array($this, 'ford_dealer_code_callback'),
      'leadbox-settings',
      'adobe'
    );

    add_settings_section(
      'jlr',
      'Shift Digital Tagging',
      array($this, 'print_section_info'),
      'leadbox-settings'
    );

    add_settings_field(
      'jlr_option',
      'Status',
      array($this, 'jlr_option_callback'),
      'leadbox-settings',
      'jlr'
    );

    add_settings_field(
      'jlr_version',
      'Environment',
      array($this, 'jlr_version_callback'),
      'leadbox-settings',
      'jlr'
    );

    add_settings_field(
      'jlr_dealer_code',
      'Client ID',
      array($this, 'jlr_dealer_code_callback'),
      'leadbox-settings',
      'jlr'
    );

    add_settings_field(
      'jlr_retailer_code',
      'Retailer Code',
      array($this, 'jlr_retailer_code_callback'),
      'leadbox-settings',
      'jlr'
    );

    add_settings_field(
      'jlr_provider_code',
      'Provider Code',
      array($this, 'jlr_provider_code_callback'),
      'leadbox-settings',
      'jlr'
    );

    add_settings_field(
      'jlr_dealer_bac',
      'Dealer BAC',
      array($this, 'jlr_dealer_bac_callback'),
      'leadbox-settings',
      'jlr'
    );

    add_settings_field(
      'jlr_pagebrand',
      'Page Brand',
      array($this, 'jlr_pagebrand_callback'),
      'leadbox-settings',
      'jlr'
    );

    add_settings_section(
      'addons',
      'Add Ons',
      array($this, 'print_section_empty'),
      'leadbox-settings'
    );

    add_settings_section(
      'cartender',
      'Cartender',
      array($this, 'print_section_info'),
      'leadbox-settings',
      'addons'
    );

    add_settings_field(
      'cartender_option',
      'Status',
      array($this, 'cartender_option_callback'),
      'leadbox-settings',
      'cartender'
    );
    add_settings_field(
      'cartender_url',
      'Dealer ID',
      array($this, 'cartender_url_callback'),
      'leadbox-settings',
      'cartender'
    );


    add_settings_section(
      'live_agent',
      'Live Person',
      array($this, 'print_section_info'),
      'leadbox-settings',
      'addons'
    );
    add_settings_field(
      'live_agent_option',
      'Status',
      array($this, 'live_agent_option_callback'),
      'leadbox-settings',
      'live_agent'
    );
    add_settings_field(
      'live_agent_code',
      'Code Script',
      array($this, 'live_agent_code_callback'),
      'leadbox-settings',
      'live_agent'
    );

    add_settings_section(
      'moto_insight',
      'Moto Insight',
      array($this, 'print_section_info'),
      'leadbox-settings',
      'addons'
    );
    add_settings_field(
      'moto_insight_option',
      'Status',
      array($this, 'moto_insight_option_callback'),
      'leadbox-settings',
      'moto_insight'
    );
    add_settings_field(
      'moto_insight_url',
      'Script URL',
      array($this, 'moto_insight_url_callback'),
      'leadbox-settings',
      'moto_insight'
    );
    add_settings_field(
      'moto_insight_label',
      'Label',
      array($this, 'moto_insight_label_callback'),
      'leadbox-settings',
      'moto_insight'
    );
    add_settings_field(
      'moto_insight_label_fr',
      'Label Fr',
      array($this, 'moto_insight_label_fr_callback'),
      'leadbox-settings',
      'moto_insight'
    );

    add_settings_section(
      'carfax',
      'Carfax',
      array($this, 'print_section_info'),
      'leadbox-settings',
      'addons'
    );

    add_settings_field(
      'carfax_option',
      'Status',
      array($this, 'carfax_option_callback'),
      'leadbox-settings',
      'carfax'
    );

    add_settings_field(
      'carfax_thirdpartykey',
      'CarFax Third Party Key',
      array($this, 'carfax_thirdpartykey_callback'),
      'leadbox-settings',
      'carfax'
    );

    add_settings_field(
      'carfax_account_number',
      'Account Number',
      array($this, 'carfax_account_number_callback'),
      'leadbox-settings',
      'carfax'
    );

    add_settings_field(
      'carfax_webservicetoken',
      'Webservice Token',
      array($this, 'carfax_webservicetoken_callback'),
      'leadbox-settings',
      'carfax'
    );

    add_settings_section(
      'iboost360',
      'iBoost360',
      array($this, 'print_section_info'),
      'leadbox-settings',
      'addons'
    );

    add_settings_field(
      'iboost_option',
      'Status',
      array($this, 'iboost_option_callback'),
      'leadbox-settings',
      'iboost360'
    );

    add_settings_field(
      'iboost_token',
      'Token',
      array($this, 'iboost_token_callback'),
      'leadbox-settings',
      'iboost360'
    );

    add_settings_section(
      'additional_info',
      'Additional Info',
      array($this, 'print_section_info'),
      'leadbox-settings',
      'addons'
    );

    add_settings_field(
      'additional_info_purpose',
      'Purpose',
      array($this, 'additional_info_option_callback'),
      'leadbox-settings',
      'additional_info'
    );

    add_settings_field(
      'additional_info_live_date',
      'Live Date',
      array($this, 'live_data_option_callback'),
      'leadbox-settings',
      'additional_info'
    );

    add_settings_field(
      'additional_info_billing',
      'Billing ID',
      array($this, 'billing_id_option_callback'),
      'leadbox-settings',
      'additional_info'
    );
    add_settings_field(
      'additional_info_group_name',
      'Group Name',
      array($this, 'group_name_option_callback'),
      'leadbox-settings',
      'additional_info'
    );

    add_settings_section(
      'lbx_datalayer',
      'Leadbox DataLayer',
      array($this, 'print_section_info'),
      'leadbox-settings',
      'addons'
    );
    add_settings_field(
      'enable_lbx_datalayer',
      'Status',
      array($this, 'enable_lbx_datalayer_callback'),
      'leadbox-settings',
      'lbx_datalayer'
    );
    add_settings_field(
      'leadbox_id',
      'Leadbox Account ID',
      array($this, 'leadbox_id_callback'),
      'leadbox-settings',
      'lbx_datalayer'
    );

    add_settings_section(
      'new_finance_lease',
      'New Finance/Lease JSON',
      array($this, 'print_section_info'),
      'leadbox-settings',
      'addons'
    );
    add_settings_field(
      'new_finance_lease_option',
      'Use New Finance/Lease JSON file',
      array($this, 'new_finance_lease_option_callback'),
      'leadbox-settings',
      'new_finance_lease'
    );
    add_settings_section(
      'custom_finance_lease',
      'Custom Used Finance',
      array($this, 'print_section_info'),
      'leadbox-settings',
      'addons'
    );
    add_settings_field(
      'custom_finance_lease_option',
      'Use Custom Finance Setting',
      array($this, 'custom_finance_lease_option_callback'),
      'leadbox-settings',
      'custom_finance_lease'
    );
  }

  public function backend_url()
  {
    printf(
      '<input type="text" id="backend_url" name="leadbox-settings[backend_url]" value="%s" />',
      isset($this->leadbox_settings['backend_url']) ? esc_attr($this->leadbox_settings['backend_url']) : ''

    );
  }

  public function graphql_url()
  {
    printf(
      '<input type="text" id="graphql_url" name="leadbox-settings[graphql_url]" value="%s" />',
      isset($this->leadbox_settings['graphql_url']) ? esc_attr($this->leadbox_settings['graphql_url']) : ''

    );
  }

  public function leads_api_url_callback()
  {
    printf(
      '<input type="text" id="leads_api_url" name="leadbox-settings[leads_api_url]" value="%s" />',
      isset($this->leadbox_settings['leads_api_url']) ? esc_attr($this->leadbox_settings['leads_api_url']) : ''
    );
  }

  public function leads_api_token_callback()
  {
    printf(
      '<input type="text" id="leads_api_token" name="leadbox-settings[leads_api_token]" value="%s" />',
      isset($this->leadbox_settings['leads_api_token']) ? esc_attr($this->leadbox_settings['leads_api_token']) : ''
    );
  }

  public function inventory_api_url_callback()
  {
    printf(
      '<input type="text" id="inventory_api_url" name="leadbox-settings[inventory_api_url]" value="%s" />',
      isset($this->leadbox_settings['inventory_api_url']) ? esc_attr($this->leadbox_settings['inventory_api_url']) : ''
    );
  }

  public function inventory_api_token_callback()
  {
    printf(
      '<input type="text" id="inventory_api_token" name="leadbox-settings[inventory_api_token]" value="%s" />',
      isset($this->leadbox_settings['inventory_api_token']) ? esc_attr($this->leadbox_settings['inventory_api_token']) : ''
    );
  }

  /**
   * LBT-1468 — Where Ninja Forms leads are routed:
   *   legacy     => leadbox-be POST /api/v1/lead (current behavior, default)
   *   leadbox_os => Leadbox Platform POST /api/v1/leads
   *   both       => dual-write; legacy stays authoritative, Leadbox Platform fires non-blocking
   */
  public function lead_intake_target_callback()
  {
    $options = array(
      'legacy'     => 'Legacy backend only (leadbox-be)',
      'leadbox_os' => 'Leadbox Platform only',
      'both'       => 'Both (dual-write — legacy authoritative)',
    );

    $current = isset($this->leadbox_settings['lead_intake_target'])
      ? $this->leadbox_settings['lead_intake_target']
      : 'legacy';
    if (!array_key_exists($current, $options)) {
      $current = 'legacy';
    }

    $forced = class_exists('LB_API_Settings')
      && LB_API_Settings::getInstance()->isLeadIntakeTargetForcedByConstant();

    echo '<select id="lead_intake_target" name="leadbox-settings[lead_intake_target]"' . ($forced ? ' disabled' : '') . '>';
    foreach ($options as $value => $label) {
      printf(
        '<option value="%s"%s>%s</option>',
        esc_attr($value),
        selected($current, $value, false),
        esc_html($label)
      );
    }
    echo '</select>';

    if ($forced) {
      printf(
        '<p class="description" style="color:#b32d2e;">Overridden by the <code>LEADBOX_LEAD_INTAKE_TARGET</code> constant in wp-config.php (currently <code>%s</code>). This setting is ignored while the constant is defined.</p>',
        esc_html(strtolower((string) LEADBOX_LEAD_INTAKE_TARGET))
      );
    } else {
      echo '<p class="description">Routes Ninja Forms lead submissions. Default <code>legacy</code> is byte-for-byte identical to current behavior.</p>';
    }

    // The URL/token fields are only relevant when routing to the Platform.
    // Hide them while 'legacy' is selected, and react as the target changes.
    ?>
    <script>
    (function () {
      var select = document.getElementById('lead_intake_target');
      if (!select) { return; }
      function toggleEndpointRows() {
        var hide = select.value === 'legacy';
        var rows = document.querySelectorAll('tr.lb-intake-endpoint-row');
        for (var i = 0; i < rows.length; i++) {
          rows[i].style.display = hide ? 'none' : '';
        }
      }
      select.addEventListener('change', toggleEndpointRows);
      toggleEndpointRows();
    })();
    </script>
    <?php
  }

  /**
   * LBT-1468 — Base URL of the Leadbox Platform lead-intake endpoint. Optional:
   * blank falls back to the LEADBOX_OS_LEAD_INTAKE_URL default. An invalid value
   * is ignored at resolution (the default is used) and flagged here.
   */
  public function leadbox_os_lead_intake_url_callback()
  {
    $default = class_exists('LB_API_Settings')
      ? LB_API_Settings::LEADBOX_OS_LEAD_INTAKE_URL
      : 'https://os.leadboxhq.com';

    $stored = isset($this->leadbox_settings['leadbox_os_lead_intake_url'])
      ? trim($this->leadbox_settings['leadbox_os_lead_intake_url'])
      : '';

    printf(
      '<input type="text" id="leadbox_os_lead_intake_url" name="leadbox-settings[leadbox_os_lead_intake_url]" value="%s" placeholder="%s" class="regular-text" autocomplete="off" />',
      esc_attr($stored),
      esc_attr($default)
    );

    // An invalid override resolves to '' here, signalling the default is in use.
    $invalid = $stored !== '' && class_exists('LB_API_Settings')
      && LB_API_Settings::sanitizeLeadIntakeUrl($stored, '') === '';

    if ($invalid) {
      printf(
        '<p class="description" style="color:#b32d2e;">Not a valid URL — ignored. Using the default <code>%s</code>. The client appends <code>/api/v1/leads</code>.</p>',
        esc_html($default)
      );
    } else {
      printf(
        '<p class="description">Leave blank to use the default <code>%s</code>. The client appends <code>/api/v1/leads</code>.</p>',
        esc_html($default)
      );
    }
  }

  public function leadbox_os_lead_intake_token_callback()
  {
    printf(
      '<input type="text" id="leadbox_os_lead_intake_token" name="leadbox-settings[leadbox_os_lead_intake_token]" value="%s" placeholder="wl_key_..." autocomplete="off" />',
      isset($this->leadbox_settings['leadbox_os_lead_intake_token']) ? esc_attr($this->leadbox_settings['leadbox_os_lead_intake_token']) : ''
    );
    echo '<p class="description">Website lead-intake Bearer token (<code>wl_key_…</code>) issued by Leadbox Platform for this location.</p>';
  }

  public function report_url_callback()
  {
    printf(
      '<input type="text" id="report_url" name="leadbox-settings[report_url]" value="%s" />',
      isset($this->leadbox_settings['report_url']) ? esc_attr($this->leadbox_settings['report_url']) : ''
    );
  }

  public function credit_url_callback()
  {
    printf(
      '<input type="text" id="credit_url" name="leadbox-settings[credit_url]" value="%s" />',
      isset($this->leadbox_settings['credit_url']) ? esc_attr($this->leadbox_settings['credit_url']) : ''
    );
  }


  public function google_analytics_id_callback()
  {
    printf(
      '<input type="text" id="google_analytics_id" name="leadbox-settings[google_analytics_id]" value="%s" />',
      isset($this->leadbox_settings['google_analytics_id']) ? esc_attr($this->leadbox_settings['google_analytics_id']) : ''
    );
  }

  public function google_tag_manager_token_callback()
  {
    printf(
      '<input type="text" id="google_tag_manager_token" name="leadbox-settings[google_tag_manager_token]" value="%s" />',
      isset($this->leadbox_settings['google_tag_manager_token']) ? esc_attr($this->leadbox_settings['google_tag_manager_token']) : ''
    );
  }

  public function ford_adobe_tagging_callback()
  {
    if (!isset($this->leadbox_settings['ford_adobe_option'])) {
      $this->leadbox_settings['ford_adobe_option'] = "Disabled";
    }

    echo '<select id="ford_adobe_option" name="leadbox-settings[ford_adobe_option]">';
    if (strtolower($this->leadbox_settings['ford_adobe_option']) == 'disabled') {
      echo '<option selected value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else if (strtolower($this->leadbox_settings['ford_adobe_option']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }

  public function jlr_option_callback()
  {
    if (!isset($this->leadbox_settings['jlr_option'])) {
      $this->leadbox_settings['jlr_option'] = "Disabled";
    }

    echo '<select id="jlr_option" name="leadbox-settings[jlr_option]">';
    if (strtolower($this->leadbox_settings['jlr_option']) == 'disabled') {
      echo '<option selected value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else if (strtolower($this->leadbox_settings['jlr_option']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }

  public function ford_vehicle_count_callback()
  {
    if (!isset($this->branding_options['vehicle_count_option'])) {
      $this->branding_options['vehicle_count_option'] = "Disabled";
    }

    echo '<select id="vehicle_count_option" name="dealer-settings-branding-options[vehicle_count_option]">';
    if (strtolower($this->branding_options['vehicle_count_option']) == 'disabled') {
      echo '<option selected value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else if (strtolower($this->branding_options['vehicle_count_option']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }

  public function newsletter_enabled_callback()
  {
    if (!isset($this->branding_options['newsletter_enabled_option'])) {
      $this->branding_options['newsletter_enabled_option'] = "Enabled";
    }
    echo '<select id="newsletter_setting_enabled_option" name="dealer-settings-branding-options[newsletter_enabled_option]">';
    if (strtolower($this->branding_options['newsletter_enabled_option']) == 'disabled') {
      echo '<option selected value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else if (strtolower($this->branding_options['newsletter_enabled_option']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }




  public function ford_adobe_version_callback()
  {
    if (!isset($this->leadbox_settings['ford_adobe_version'])) {
      $this->leadbox_settings['ford_adobe_version'] = "Staging";
    }

    echo '<select id="ford_adobe_version" name="leadbox-settings[ford_adobe_version]">';
    if (strtolower($this->leadbox_settings['ford_adobe_version']) == 'staging') {
      echo '<option selected value="Staging">Staging</option>';
      echo '<option value="Production">Production</option>';
    } else if (strtolower($this->leadbox_settings['ford_adobe_version']) == 'production') {
      echo '<option value="Staging">Staging</option>';
      echo '<option selected value="Production">Production</option>';
    } else {
      echo '<option value="Staging">Staging</option>';
      echo '<option value="Production">Production</option>';
    }

    echo '</select>';
  }

  public function jlr_version_callback()
  {
    if (!isset($this->leadbox_settings['jlr_version'])) {
      $this->leadbox_settings['jlr_version'] = "Staging";
    }

    echo '<select id="jlr_version" name="leadbox-settings[jlr_version]">';
    if (strtolower($this->leadbox_settings['jlr_version']) == 'staging') {
      echo '<option selected value="Staging">Staging</option>';
      echo '<option value="Production">Production</option>';
    } else if (strtolower($this->leadbox_settings['jlr_version']) == 'production') {
      echo '<option value="Staging">Staging</option>';
      echo '<option selected value="Production">Production</option>';
    } else {
      echo '<option value="Staging">Staging</option>';
      echo '<option value="Production">Production</option>';
    }

    echo '</select>';
  }

  public function ford_dealer_code_callback()
  {
    printf(
      '<input type="text" id="ford_dealer_code" name="leadbox-settings[ford_dealer_code]" value="%s" />',
      isset($this->leadbox_settings['ford_dealer_code']) ? esc_attr($this->leadbox_settings['ford_dealer_code']) : ''
    );
  }

  public function jlr_dealer_code_callback()
  {
    printf(
      '<input type="text" id="jlr_dealer_code" name="leadbox-settings[jlr_dealer_code]" value="%s" />',
      isset($this->leadbox_settings['jlr_dealer_code']) ? esc_attr($this->leadbox_settings['jlr_dealer_code']) : ''
    );
  }

  public function jlr_retailer_code_callback()
  {
    printf(
      '<input type="text" id="jlr_retailer_code" name="leadbox-settings[jlr_retailer_code]" value="%s" />',
      isset($this->leadbox_settings['jlr_retailer_code']) ? esc_attr($this->leadbox_settings['jlr_retailer_code']) : ''
    );
  }

  public function jlr_provider_code_callback()
  {
    printf(
      '<input type="text" id="jlr_provider_code" name="leadbox-settings[jlr_provider_code]" value="%s" />',
      isset($this->leadbox_settings['jlr_provider_code']) && !empty($this->leadbox_settings['jlr_provider_code']) ? esc_attr($this->leadbox_settings['jlr_provider_code']) : 'LEADBOX'
    );
  }

  public function jlr_pagebrand_callback()
  {
    printf(
      '<input type="text" id="jlr_pagebrand" name="leadbox-settings[jlr_pagebrand]" value="%s" />',
      isset($this->leadbox_settings['jlr_pagebrand']) ? esc_attr($this->leadbox_settings['jlr_pagebrand']) : ''
    );
  }

  public function jlr_dealer_bac_callback()
  {
    printf(
      '<input type="text" id="jlr_dealer_bac" name="leadbox-settings[jlr_dealer_bac]" value="%s" />',
      isset($this->leadbox_settings['jlr_dealer_bac']) ? esc_attr($this->leadbox_settings['jlr_dealer_bac']) : ''
    );
  }

  public function carfax_option_callback()
  {
    if (!isset($this->leadbox_settings['carfax'])) {
      $this->leadbox_settings['carfax'] = "Disabled";
    }

    echo '<select id="carfax" name="leadbox-settings[carfax]">';
    if (strtolower($this->leadbox_settings['carfax']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->leadbox_settings['carfax']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }

  public function carfax_thirdpartykey_callback()
  {
    printf(
      '<input type="text" id="carfax_thirdpartykey" name="leadbox-settings[carfax_thirdpartykey]" value="%s" />',
      isset($this->leadbox_settings['carfax_thirdpartykey']) ? esc_attr($this->leadbox_settings['carfax_thirdpartykey']) : ''
    );
  }

  public function carfax_account_number_callback()
  {
    printf(
      '<input type="text" id="carfax_account_number" name="leadbox-settings[carfax_account_number]" value="%s" />',
      isset($this->leadbox_settings['carfax_account_number']) ? esc_attr($this->leadbox_settings['carfax_account_number']) : ''
    );
  }

  public function carfax_webservicetoken_callback()
  {
    printf(
      '<input type="text" id="carfax_webservicetoken" name="leadbox-settings[carfax_webservicetoken]" value="%s" />',
      isset($this->leadbox_settings['carfax_webservicetoken']) ? esc_attr($this->leadbox_settings['carfax_webservicetoken']) : ''
    );
  }

  public function finance_rate_callback()
  {
    printf(
      '<input type="text" id="finance_rate" name="dealer-settings-branding-options[finance_rate]" value="%s" />',
      isset($this->branding_options['finance_rate']) ? esc_attr($this->branding_options['finance_rate']) : ''
    );
  }

  public function finance_term_callback()
  {
    printf(
      '<input type="number" id="finance_term" name="dealer-settings-branding-options[finance_term]" value="%s"/>',
      isset($this->branding_options['finance_term']) ? esc_attr($this->branding_options['finance_term']) : ''
    );
  }

  public function finance_downpayment_callback()
  {
    printf(
      '<input type="number" step="0.01" id="finance_downpayment" name="dealer-settings-branding-options[finance_downpayment]" value="%s"/>',
      isset($this->branding_options['finance_downpayment']) ? esc_attr($this->branding_options['finance_downpayment']) : ''
    );
  }


  public function lease_term_callback()
  {
    printf(
      '<input type="number" id="lease_term" name="dealer-settings-branding-options[lease_term]" value="%s" />',
      isset($this->branding_options['lease_term']) ? esc_attr($this->branding_options['lease_term']) : ''
    );
  }

  public function lease_rate_callback()
  {
    printf(
      '<input type="text" id="lease_rate" name="dealer-settings-branding-options[lease_rate]" value="%s" />',
      isset($this->branding_options['lease_rate']) ? esc_attr($this->branding_options['lease_rate']) : ''
    );
  }
  public function lease_downpayment_callback()
  {
    printf(
      '<input type="number" step="0.01" id="lease_downpayment" name="dealer-settings-branding-options[lease_downpayment]" value="%s" />',
      isset($this->branding_options['lease_downpayment']) ? esc_attr($this->branding_options['lease_downpayment']) : ''
    );
  }

  public function lease_residual_callback()
  {
    printf(
      '<input type="number" step="0.01" id="lease_residual" name="dealer-settings-branding-options[lease_residual]" value="%s" />',
      isset($this->branding_options['lease_residual']) ? esc_attr($this->branding_options['lease_residual']) : ''
    );
  }

  public function manufacturer_callback()
  {
    printf(
      '<input type="text" id="manufacturer" name="leadbox-settings[manufacturer]" value="%s"/>',
      isset($this->leadbox_settings['manufacturer']) ? esc_attr($this->leadbox_settings['manufacturer']) : ''
    );
  }

  public function other_brands_callback()
  {
    printf(
      '<input type="text" id="other_brands" name="leadbox-settings[other_brands]" value="%s"/>',
      isset($this->leadbox_settings['other_brands']) ? esc_attr($this->leadbox_settings['other_brands']) : ''
    );
  }

  public function oem_models_callback()
  {
    printf(
      '<input type="text" id="oem_models" name="leadbox-settings[oem_models]" value="%s"/>',
      isset($this->leadbox_settings['oem_models']) ? esc_attr($this->leadbox_settings['oem_models']) : ''
    );
  }

  public function all_brands_callback()
  {
    printf(
      '<input type="text" id="all_brands" name="leadbox-settings[all_brands]" value="%s"/>',
      isset($this->leadbox_settings['all_brands']) ? esc_attr($this->leadbox_settings['all_brands']) : ''
    );
  }

  public function lineup_callback()
  {
    if (!isset($this->leadbox_settings['lineup'])) {
      $this->leadbox_settings['lineup'] = "Default";
    }

    echo '<select id="lineup" name="leadbox-settings[lineup]">';
    if (strtolower($this->leadbox_settings['lineup']) == 'default') {
      echo '<option selected value="Default">Default</option>';
      echo '<option value="Custom">Custom</option>';
    } else if (strtolower($this->leadbox_settings['lineup']) == 'custom') {
      echo '<option value="Default">Default</option>';
      echo '<option selected value="Custom">Custom</option>';
    } else {
      echo '<option value="Default">Default</option>';
      echo '<option value="Custom">Custom</option>';
    }

    echo '</select>';
  }

  public function megamenu_lineup_callback()
  {
    if (!isset($this->leadbox_settings['megamenu_lineup'])) {
      $this->leadbox_settings['megamenu_lineup'] = "disabled";
    }

    echo '<select id="megamenu_lineup" name="leadbox-settings[megamenu_lineup]">';
    if (strtolower($this->leadbox_settings['megamenu_lineup']) == 'disabled') {
      echo '<option selected value="disabled">Disabled</option>';
      echo '<option value="enabled">Enabled</option>';
    } else if (strtolower($this->leadbox_settings['megamenu_lineup']) == 'enabled') {
      echo '<option value="disabled">Disabled</option>';
      echo '<option selected value="enabled">Enabled</option>';
    } else {
      echo '<option value="disabled">Disabled</option>';
      echo '<option value="enabled">Enabled</option>';
    }

    echo '</select>';
  }

  public function trimselector_callback()
  {
    if (!isset($this->leadbox_settings['trimselector'])) {
      $this->leadbox_settings['trimselector'] = "Default";
    }

    echo '<select id="trimselector" name="leadbox-settings[trimselector]">';
    if (strtolower($this->leadbox_settings['trimselector']) == 'default') {
      echo '<option selected value="Default">Default</option>';
      echo '<option value="Custom">Custom</option>';
    } else if (strtolower($this->leadbox_settings['trimselector']) == 'custom') {
      echo '<option value="Default">Default</option>';
      echo '<option selected value="Custom">Custom</option>';
    } else {
      echo '<option value="Default">Default</option>';
      echo '<option value="Custom">Custom</option>';
    }

    echo '</select>';
  }

   public function model_e_callback()
  {
    if (!isset($this->leadbox_settings['model_e_setting'])) {
      $this->leadbox_settings['model_e_setting'] = "Disabled";
    }

    echo '<select id="model_e_setting" name="leadbox-settings[model_e_setting]">';
    if (strtolower($this->leadbox_settings['model_e_setting']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->leadbox_settings['model_e_setting']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }

  public function dealer_information_callback()
  {
    if (!isset($this->leadbox_settings['dealer_information'])) {
      $this->leadbox_settings['dealer_information'] = "Auto";
    }

    echo '<select id="dealer_information" name="leadbox-settings[dealer_information]">';
    if (strtolower($this->leadbox_settings['dealer_information']) == 'auto') {
      echo '<option selected value="Auto">Auto</option>';
      echo '<option value="RV">RV</option>';
      echo '<option value="Mixed">Mixed</option>';
    } else if (strtolower($this->leadbox_settings['dealer_information']) == 'rv') {
      echo '<option value="Auto">Auto</option>';
      echo '<option selected value="RV">RV</option>';
      echo '<option value="Mixed">Mixed</option>';
    } else if (strtolower($this->leadbox_settings['dealer_information']) == 'mixed') {
      echo '<option value="Auto">Auto</option>';
      echo '<option value="RV">RV</option>';
      echo '<option selected value="Mixed">Mixed</option>';
    } else {
      echo '<option value="Auto">Auto</option>';
      echo '<option value="RV">RV</option>';
      echo '<option value="Mixed">Mixed</option>';
    }

    echo '</select>';
  }
  public function oem_program_callback()
  {
    $oem_options = '';
    foreach ($this->oem_program_options as $oem_program) {
      $oem_options .= '<option '. (isset($this->leadbox_settings['oem_program']) && strtolower(str_replace(' ', '', $this->leadbox_settings['oem_program'])) == strtolower(str_replace(' ', '', $oem_program)) ? ' selected '  : '').' value="' . $oem_program . '">' . $oem_program . '</option>';
    }

    printf(
      '<select id="oem_program" name="leadbox-settings[oem_program]">
        %s
        </select>',
      $oem_options
    );
  }

  public function finance_frequency_callback()
  {
    if (!isset($this->branding_options['finance_frequency'])) {
      $this->branding_options['finance_frequency'] = "Weekly";
    }

    echo '<select id="finance_frequency" name="dealer-settings-branding-options[finance_frequency] ">';
    if (strtolower($this->branding_options['finance_frequency']) == 'bi-weekly') {
      echo '<option value="Weekly">Weekly</option>';
      echo '<option selected value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option value="Monthly">Monthly</option>';
    } else if (strtolower($this->branding_options['finance_frequency']) == 'weekly') {
      echo '<option selected value="Weekly">Weekly</option>';
      echo '<option value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option value="Monthly">Monthly</option>';
    } else if (strtolower($this->branding_options['finance_frequency']) == 'monthly') {
      echo '<option value="Weekly">Weekly</option>';
      echo '<option value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option selected value="Monthly">Monthly</option>';
    } else {
      echo '<option value="Weekly">Weekly</option>';
      echo '<option value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option value="Monthly">Monthly</option>';
    }

    echo '</select>';
  }

  public function lease_frequency_callback()
  {
    if (!isset($this->branding_options['lease_frequency'])) {
      $this->branding_options['lease_frequency'] = "Bi-Weekly";
    }

    echo '<select id="lease_frequency" name="dealer-settings-branding-options[lease_frequency] ">';
    if (strtolower($this->branding_options['lease_frequency']) == 'bi-weekly') {
      echo '<option value="Weekly">Weekly</option>';
      echo '<option selected value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option value="Monthly">Monthly</option>';
    } else if (strtolower($this->branding_options['lease_frequency']) == 'weekly') {
      echo '<option selected value="Weekly">Weekly</option>';
      echo '<option value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option value="Monthly">Monthly</option>';
    } else if (strtolower($this->branding_options['lease_frequency']) == 'monthly') {
      echo '<option value="Weekly">Weekly</option>';
      echo '<option value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option selected value="Monthly">Monthly</option>';
    } else {
      echo '<option value="Weekly">Weekly</option>';
      echo '<option value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option value="Monthly">Monthly</option>';
    }

    echo '</select>';
  }

  /**
   * Add options page
   */
  public function add_dealer_menu()
  {
    global $_wp_last_object_menu;

    $_wp_last_object_menu++;

    add_menu_page(
      __('Dealer Settings', 'dealer-settings'),
      __('Dealer Settings', 'dealer-settings'),
      'manage_options',
      'dealer-settings',
      array($this, 'create_dealer_settings_page'),
      'dashicons-performance',
      $_wp_last_object_menu
    );

    add_submenu_page(
      'dealer-settings',
      __('Hours', 'dealer-settings'),
      __('Hours', 'dealer-settings'),
      'manage_options',
      'dealer-settings-hours',
      array($this, 'create_hours_page'),
    );

    add_submenu_page(
      'dealer-settings',
      __('Labels', 'dealer-settings'),
      __('Labels', 'dealer-settings'),
      'manage_options',
      'dealer-settings-labels',
      array($this, 'create_labels_page'),
    );

    add_settings_section(
      'languages',
      '',
      array($this, 'print_section_languages'),
      'dealer-settings-languages'
    );

    add_settings_section(
      'labels',
      '',
      array($this, 'print_section_info'),
      'dealer-settings-labels'
    );

    add_settings_section(
      'my_garage',
      'My Garage',
      array($this, 'print_section_info'),
      'dealer-settings-my-garage'
    );

    add_settings_field(
      'img_vehicle_pricing_one',
      '',
      array($this, 'img_vehicle_pricing_one'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'calculated_msrp_callback',
      'Calculated MSRP',
      array($this, 'calculated_msrp_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'calculated_msrp_callback_fr',
      '',
      array($this, 'calculated_msrp_callback_fr'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'new_vehicle_price_label_callback',
      'New Vehicle Price',
      array($this, 'new_vehicle_price_label_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'new_vehicle_price_label_callback_fr',
      '',
      array($this, 'new_vehicle_price_label_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'used_vehicle_price_label_callback',
      'Used Vehicle Price',
      array($this, 'used_vehicle_price_label_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'used_vehicle_price_label_fr_callback',
      '',
      array($this, 'used_vehicle_price_label_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'after_discount_price_callback',
      'New After Discount Price',
      array($this, 'after_discount_price_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'after_discount_price_fr_callback',
      '',
      array($this, 'after_discount_price_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'used_after_discount_price_callback',
      'Used After Discount Price',
      array($this, 'used_after_discount_price_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'used_after_discount_price_fr_callback',
      '',
      array($this, 'used_after_discount_price_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'special_discount_price_callback',
      'Special Discount',
      array($this, 'special_discount_price_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'special_discount_price_fr_callback',
      '',
      array($this, 'special_discount_price_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'special_price_callback',
      'Special Price',
      array($this, 'special_price_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'special_price_fr_callback',
      '',
      array($this, 'special_price_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'rebates_label_callback',
      'Rebates',
      array($this, 'rebates_label_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'rebates_label_fr_callback',
      '',
      array($this, 'rebates_label_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'additional_rebates_label_callback',
      'Additional Rebates',
      array($this, 'additional_rebates_label_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'additional_rebates_label_fr_callback',
      '',
      array($this, 'additional_rebates_label_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'tax_and_lic_label_callback',
      'New Tax & Lic',
      array($this, 'tax_and_lic_label_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'tax_and_lic_label_fr_callback',
      '',
      array($this, 'tax_and_lic_label_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'used_tax_and_lic_label_callback',
      'Used Tax & Lic',
      array($this, 'used_tax_and_lic_label_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'used_tax_and_lic_label_fr_callback',
      '',
      array($this, 'used_tax_and_lic_label_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    //aqui toy
    add_settings_field(
      'new_tax_label_callback',
      'New Tax',
      array($this, 'new_tax_label_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'new_tax_label_fr_callback',
      '',
      array($this, 'new_tax_label_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'used_tax_label_callback',
      'Used Tax',
      array($this, 'used_tax_label_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'used_tax_label_fr_callback',
      '',
      array($this, 'used_tax_label_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    /* lic */

    add_settings_field(
      'new_lic_label_callback',
      'New Lic.',
      array($this, 'new_lic_label_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'new_lic_label_fr_callback',
      '',
      array($this, 'new_lic_label_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'used_lic_label_callback',
      'Used Lic.',
      array($this, 'used_lic_label_callback'),
      'dealer-settings-labels',
      'labels'
    );

    add_settings_field(
      'used_lic_label_fr_callback',
      '',
      array($this, 'used_lic_label_fr_callback'),
      'dealer-settings-labels',
      'labels'
    );


    /* TAG LABELS */

    add_settings_section(
      'tag-labels',
      'Tag Labels',
      array($this, 'print_section_info'),
      'dealer-settings-tag-labels'
    );

    add_settings_field(
      'img_vehicle_pricing_three',
      '',
      array($this, 'img_vehicle_pricing_three'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

		//* Demo Tag

    add_settings_field(
      'demo_tag_label_callback',
      'Demo',
      array($this, 'demo_tag_label_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

    add_settings_field(
      'demo_tag_label_fr_callback',
      '',
      array($this, 'demo_tag_label_fr_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );
    add_settings_field(
      'demo_tag_label_color_callback',
      'Custom Demo Tag',
      array($this, 'demo_tag_label_color_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );
    add_settings_field(
      'demo_tag_label_limit_callback',
      '',
      array($this, 'demo_tag_label_limit_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

		//* salepending Tag

    add_settings_field(
      'salepending_tag_label_callback',
      'Sale Pending',
      array($this, 'salepending_tag_label_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

    add_settings_field(
      'salepending_tag_label_fr_callback',
      '',
      array($this, 'salepending_tag_label_fr_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

		add_settings_field(
      'salepending_tag_label_color_callback',
      'Custom salepending Tag',
      array($this, 'salepending_tag_label_color_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );
    add_settings_field(
      'salepending_tag_label_limit_callback',
      '',
      array($this, 'salepending_tag_label_limit_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

		//* certified Tag

    add_settings_field(
      'certified_tag_label_callback',
      'Certified',
      array($this, 'certified_tag_label_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

    add_settings_field(
      'certified_tag_label_fr_callback',
      '',
      array($this, 'certified_tag_label_fr_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

		add_settings_field(
      'certified_tag_label_color_callback',
      'Custom certified Tag',
      array($this, 'certified_tag_label_color_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );
    add_settings_field(
      'certified_tag_label_limit_callback',
      '',
      array($this, 'certified_tag_label_limit_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

		//* Special Tag

    add_settings_field(
      'special_tag_label_callback',
      'Special',
      array($this, 'special_tag_label_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

    add_settings_field(
      'special_tag_label_fr_callback',
      '',
      array($this, 'special_tag_label_fr_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

		add_settings_field(
      'special_tag_label_color_callback',
      'Custom special Tag',
      array($this, 'special_tag_label_color_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );
    add_settings_field(
      'special_tag_label_limit_callback',
      '',
      array($this, 'special_tag_label_limit_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

		//* Incoming Tag

    add_settings_field(
      'incoming_tag_label_callback',
      'Incoming',
      array($this, 'incoming_tag_label_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

    add_settings_field(
      'incoming_tag_label_fr_callback',
      '',
      array($this, 'incoming_tag_label_fr_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );
		add_settings_field(
      'incoming_tag_label_color_callback',
      'Custom incoming Tag',
      array($this, 'incoming_tag_label_color_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );
    add_settings_field(
      'incoming_tag_label_limit_callback',
      '',
      array($this, 'incoming_tag_label_limit_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

		//* As is Tag

    add_settings_field(
      'asis_tag_label_callback',
      'As is',
      array($this, 'asis_tag_label_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

    add_settings_field(
      'asis_tag_label_fr_callback',
      '',
      array($this, 'asis_tag_label_fr_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

		add_settings_field(
      'asis_tag_label_color_callback',
      'Custom As is Tag',
      array($this, 'asis_tag_label_color_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );
    add_settings_field(
      'asis_tag_label_limit_callback',
      '',
      array($this, 'asis_tag_label_limit_callback'),
      'dealer-settings-tag-labels',
      'tag-labels'
    );

    /* ------------------------------------- */

    add_settings_section(
      'phones',
      'Phones',
      array($this, 'print_section_info'),
      'dealer-settings-phones'
    );

    add_settings_field(
      'img_vehicle_pricing_two',
      '',
      array($this, 'img_vehicle_pricing_two'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_sales_label_callback',
      'Phone Sales',
      array($this, 'phone_sales_label_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_sales_label_fr_callback',
      '',
      array($this, 'phone_sales_label_fr_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_parts_label_callback',
      'Phone Parts',
      array($this, 'phone_parts_label_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_parts_label_fr_callback',
      '',
      array($this, 'phone_parts_label_fr_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_service_label_callback',
      'Phone Service',
      array($this, 'phone_service_label_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_service_label_fr_callback',
      '',
      array($this, 'phone_service_label_fr_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_fax_label_callback',
      'Phone Fax',
      array($this, 'phone_fax_label_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_fax_label_fr_callback',
      '',
      array($this, 'phone_fax_label_fr_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_body_shop_label_callback',
      'Phone Body Shop',
      array($this, 'phone_body_shop_label_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_body_shop_label_fr_callback',
      '',
      array($this, 'phone_body_shop_label_fr_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_collision_label_callback',
      'Phone Collision',
      array($this, 'phone_collision_label_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_collision_label_fr_callback',
      '',
      array($this, 'phone_collision_label_fr_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_accessories_label_callback',
      'Phone Accessories',
      array($this, 'phone_accessories_label_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_accessories_label_fr_callback',
      '',
      array($this, 'phone_accessories_label_fr_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_sms_label_callback',
      'Phone SMS',
      array($this, 'phone_sms_label_callback'),
      'dealer-settings-phones',
      'phones'
    );

    add_settings_field(
      'phone_sms_label_fr_callback',
      '',
      array($this, 'phone_sms_label_fr_callback'),
      'dealer-settings-phones',
      'phones'
    );


    add_settings_field(
      'my_garage_option_callback',
      'Status',
      array($this, 'my_garage_option_callback'),
      'dealer-settings-my-garage',
      'my_garage'
    );

    add_submenu_page(
      'dealer-settings',
      __('Contact', 'dealer-settings'),
      __('Contact', 'dealer-settings'),
      'manage_options',
      'dealer-settings-contact',
      array($this, 'create_contact_page'),
    );
    add_submenu_page(
      'dealer-settings',
      __('Used Finance', 'dealer-settings'),
      __('Used Finance', 'dealer-settings'),
      'manage_options',
      'dealer-settings-used_finance_custom',
      array($this, 'create_used_finance_custom_page'),
    );

    // LBT-1462: "LBX Listing Images" was moved out of the Dealer Settings submenu
    // into its own top-level menu — see add_listing_images_menu() (hooked at
    // admin_menu priority 11 so it lands after Dealer Settings and Leadbox Settings).

    add_submenu_page(
      'dealer-settings',
      __('Social Media', 'dealer-settings'),
      __('Social Media', 'dealer-settings'),
      'manage_options',
      'dealer-settings-socialmedia',
      array($this, 'create_socialmedia_page'),
    );

    add_submenu_page(
      'dealer-settings',
      __('Disclaimer', 'dealer-settings'),
      __('Disclaimer', 'dealer-settings'),
      'manage_options',
      'dealer-settings-disclaimer',
      array($this, 'create_disclaimer_page'),
    );

    add_submenu_page(
      'dealer-settings',
      __('Filter', 'dealer-settings'),
      __('Filter', 'dealer-settings'),
      'manage_options',
      'dealer-settings-filter',
      array($this, 'create_filter_page'),
    );


    add_submenu_page(
      'dealer-settings',
      __('Policies', 'dealer-settings'),
      __('Policies', 'dealer-settings'),
      'manage_options',
      'dealer-settings-policies',
      array($this, 'create_policies_page'),
    );

    add_submenu_page(
      'dealer-settings',
      'Backend login',
      'Backend login',
      'manage_options',
      'Backend login',
      array($this, 'goTobackend'),
    );

    add_submenu_page(
      'dealer-settings',
      __('Website Info', 'dealer-settings'),
      __('Website Info', 'dealer-settings'),
      'manage_options',
      'dealer-settings-web-info',
      array($this, 'create_web_info_page'),
    );

    add_submenu_page(
      'dealer-settings',
      __('Showroom', 'dealer-settings'),
      __('Showroom', 'dealer-settings'),
      'manage_options',
      'dealer-settings-showroom',
      array($this, 'create_showroom_config_page'),
    );

    add_submenu_page(
      'dealer-settings',
      __('My Garage', 'dealer-settings'),
      __('My Garage', 'dealer-settings'),
      'manage_options',
      'dealer-settings-my-garage',
      array($this, 'create_my_garage_page'),
    );

    add_submenu_page(
      'dealer-settings',
      __('VDP Payment Settings', 'dealer-settings'),
      __('VDP Payment Settings', 'dealer-settings'),
      'manage_options',
      'dealer-settings-vdp-payment',
      array($this, 'create_vdp_payment_page'),
    );




  }

  public function goTobackend()
  {
    $options = get_option('leadbox-settings');
    $url = isset($options['backend_url']) ? esc_attr($options['backend_url']) : '';
    if (filter_var($url, FILTER_VALIDATE_URL)) {
      // wp_redirect($url);
      echo '<script> window.open("' . $url . '","_blank") </script>';
    }
  }

  /**
   * Sanitize each setting field as needed
   *
   * @param array $input Contains all settings fields as array keys
   */
  public function sanitize($input)
  {

    // $new_input = array();
    // if( isset( $input['id_number'] ) )
    //   $new_input['id_number'] = absint($input['id_number']);

    // if( isset( $input['title'] ) )
    //   $new_input['title'] = sanitize_text_field($input['title']);

    return $input;
  }





  public function additional_info_option_callback()
  {
    if (!isset($this->leadbox_settings['additional_info_purpose'])) {
      $this->leadbox_settings['additional_info_purpose'] = "customer";
    }

    echo '<select id="additional_info_purpose" name="leadbox-settings[additional_info_purpose]">';
    if (strtolower($this->leadbox_settings['additional_info_purpose']) == 'internal') {
      echo '<option value="Customer">Customer</option>';
      echo '<option selected value="Internal">Internal</option>';
    } else if (strtolower($this->leadbox_settings['additional_info_purpose']) == 'customer') {
      echo '<option value="Customer">Customer</option>';
      echo '<option value="Internal">Internal</option>';
    } else {
      echo '<option value="Customer">Customer</option>';
      echo '<option value="Internal">Internal</option>';
    }

    echo '</select>';
  }

  public function new_finance_lease_option_callback()
  {
    if (!isset($this->leadbox_settings['new_finance_lease_option'])) {
      $this->leadbox_settings['new_finance_lease_option'] = "disabled";
    }
    echo '<select id="new_finance_lease_option" name="leadbox-settings[new_finance_lease_option]">';
    if (strtolower($this->leadbox_settings['new_finance_lease_option']) == 'disabled') {
      echo '<option value="enabled">Enabled</option>';
      echo '<option selected value="disabled">Disabled</option>';
    } else if (strtolower($this->leadbox_settings['new_finance_lease_option']) == 'enabled') {
      echo '<option selected value="enabled">Enabled</option>';
      echo '<option value="disabled">Disabled</option>';
    } else {
      echo '<option value="enabled">Enabled</option>';
      echo '<option selected value="disabled">Disabled</option>';
    }
    echo '</select>';
  }
  public function custom_finance_lease_option_callback()
  {
    if (!isset($this->leadbox_settings['custom_finance_lease_option'])) {
      $this->leadbox_settings['custom_finance_lease_option'] = "disabled";
    }
    echo '<select id="custom_finance_lease_option" name="leadbox-settings[custom_finance_lease_option]">';
    if (strtolower($this->leadbox_settings['custom_finance_lease_option']) == 'disabled') {
      echo '<option value="enabled">Enabled</option>';
      echo '<option selected value="disabled">Disabled</option>';
    } else if (strtolower($this->leadbox_settings['custom_finance_lease_option']) == 'enabled') {
      echo '<option selected value="enabled">Enabled</option>';
      echo '<option value="disabled">Disabled</option>';
    } else {
      echo '<option value="enabled">Enabled</option>';
      echo '<option selected value="disabled">Disabled</option>';
    }
    echo '</select>';
  }

  public function cartender_option_callback()
  {
    if (!isset($this->leadbox_settings['cartender'])) {
      $this->leadbox_settings['cartender'] = "Disabled";
    }

    echo '<select id="cartender" name="leadbox-settings[cartender]">';
    if (strtolower($this->leadbox_settings['cartender']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->leadbox_settings['cartender']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }

  public function cartender_url_callback()
  {
    printf(
      '<input type="text" id="cartender_url" name="leadbox-settings[cartender_url]" value="%s" />',
      isset($this->leadbox_settings['cartender_url']) ? esc_attr($this->leadbox_settings['cartender_url']) : ''
    );
  }
  public function cartender_label_callback()
  {
    printf(
      '<input type="text" id="cartender_label" name="leadbox-settings[cartender_label]" value="%s" />',
      isset($this->leadbox_settings['cartender_label']) ? esc_attr($this->leadbox_settings['cartender_label']) : ''
    );
  }
  public function cartender_label_fr_callback()
  {
    printf(
      '<input type="text" id="cartender_label_fr" name="leadbox-settings[cartender_label_fr]" value="%s" />',
      isset($this->leadbox_settings['cartender_label_fr']) ? esc_attr($this->leadbox_settings['cartender_label_fr']) : ''
    );
  }

  public function live_agent_option_callback()
  {
    if (!isset($this->leadbox_settings['live_agent'])) {
      $this->leadbox_settings['live_agent'] = "Disabled";
    }

    echo '<select id="live_agent" name="leadbox-settings[live_agent]">';
    if (strtolower($this->leadbox_settings['live_agent']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->leadbox_settings['live_agent']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }



  public function live_agent_code_callback()
  {
    printf(
      '<input type="text" id="live_agent_code" name="leadbox-settings[live_agent_code]" value="%s" />',
      isset($this->leadbox_settings['live_agent_code']) ? esc_attr($this->leadbox_settings['live_agent_code']) : ''
    );
  }

  public function moto_insight_option_callback()
  {
    if (!isset($this->leadbox_settings['moto_insight'])) {
      $this->leadbox_settings['moto_insight'] = "Disabled";
    }

    echo '<select id="moto_insight" name="leadbox-settings[moto_insight]">';
    if (strtolower($this->leadbox_settings['moto_insight']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->leadbox_settings['moto_insight']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }

  public function moto_insight_url_callback()
  {
    printf(
      '<input type="text" id="moto_insight_url" name="leadbox-settings[moto_insight_url]" value="%s" />',
      isset($this->leadbox_settings['moto_insight_url']) ? esc_attr($this->leadbox_settings['moto_insight_url']) : ''
    );
  }
  public function moto_insight_label_callback()
  {
    printf(
      '<input type="text" id="moto_insight_label" name="leadbox-settings[moto_insight_label]" value="%s" />',
      isset($this->leadbox_settings['moto_insight_label']) ? esc_attr($this->leadbox_settings['moto_insight_label']) : ''
    );
  }
  public function moto_insight_label_fr_callback()
  {
    printf(
      '<input type="text" id="moto_insight_label_fr" name="leadbox-settings[moto_insight_label_fr]" value="%s" />',
      isset($this->leadbox_settings['moto_insight_label_fr']) ? esc_attr($this->leadbox_settings['moto_insight_label_fr']) : ''
    );
  }


  /**
   * Print the Section text
   */
  public function print_section_info()
  {
    print 'Enter your settings below:';
  }

  public function print_excluded_section_info()
  {
    print 'Select the trims you want to exclude from the list below:';
  }

  public function print_excluded_models_section_info()
  {
    print 'Select the models you want to exclude from the list below:';
  }

  public function print_excluded_categories_section_info()
  {
    print 'Select the categories you want to exclude from the list below:';
  }

  public function print_section_languages()
  {
    printf('
    <table class="form-table">
    <tr>
    <td style="width: 200px;">
    </td>
    <td>
    <h2 style="width: 200px; text-align: center;"> EN </h2>
    </td>
    <td>
    <h2 style="width: 200px; text-align: center;"> FR </h2>
    </td>
    </tr>
    </table>
    ');
  }

  public function print_section_empty()
  {
    print '';
  }

  public function echo_nothing()
  {
    ?>
    <?php
  }

  /**
   * Options page callback
   */
  public function create_dealer_settings_page()
  {
    // Set class property
    $this->branding_options = get_option('dealer-settings-branding-options');
    ?>
      <div class="wrap">
        <h1>Dealer Settings</h1>
        <form method="post" action="options.php">
          <?php

          settings_fields('dealer-settings-branding-options-group');
          do_settings_sections('dealer-settings-branding');
          do_settings_sections('dealer-settings-finance');
          do_settings_sections('dealer-settings-finance-rv');
          do_settings_sections('dealer-settings-lease');
          do_settings_sections('dealer-settings-vehicle-count');
          do_settings_sections('dealer-settings-newsletter-settings');
          submit_button();

          ?>
        </form>
      </div>
    <?php
  }

  /**
   * Register and add settings
   */
  public function register_branding_settings()
  {
    $option = get_option('leadbox-settings');

    register_setting(
      'dealer-settings-branding-options-group',
      'dealer-settings-branding-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'branding',
      'Branding',
      array($this, 'print_section_info'),
      'dealer-settings-branding'
    );

    add_settings_section(
      'vehicle_count',
      'VDP Vehicle Count',
      array($this, 'print_section_info'),
      'dealer-settings-vehicle-count'
    );

    add_settings_field(
      'vehicle_count_option',
      'Status',
      array($this, 'ford_vehicle_count_callback'),
      'dealer-settings-vehicle-count',
      'vehicle_count'
    );

    add_settings_section(
      'newsletter_settings',
      'Newsletter Settings',
      array($this, 'print_section_info'),
      'dealer-settings-newsletter-settings'
    );

    add_settings_field(
      'newsletter_enabled_option',
      'Status',
      array($this, 'newsletter_enabled_callback'),
      'dealer-settings-newsletter-settings',
      'newsletter_settings'
    );

    add_settings_section(
      'finance_settings',
      'Finance',
      array($this, 'print_section_info'),
      'dealer-settings-finance'
    );

    add_settings_section(
      'lease_settings',
      'Lease',
      array($this, 'print_section_info'),
      'dealer-settings-lease'
    );

    add_settings_field(
      'logo_image',
      'Logo Image',
      array($this, 'logo_image_callback'),
      'dealer-settings-branding',
      'branding'
    );

    add_settings_field(
      'logo_footer_image',
      'Logo Footer Image',
      array($this, 'logo_footer_image_callback'),
      'dealer-settings-branding',
      'branding'
    );

    add_settings_field(
      'socialmedia_image',
      'Social Media Image',
      array($this, 'socialmedia_image_callback'),
      'dealer-settings-branding',
      'branding'
    );

    add_settings_field(
      'social_review_image',
      'Social review Image',
      array($this, 'social_review_image_callback'),
      'dealer-settings-branding',
      'branding'
    );
    if (isset($option['dealer_information']) && strtolower($option['dealer_information']) == 'rv') {
      add_settings_section(
        'finance_settings_rv',
        'Finance Settings RV',
        array($this, 'print_section_info'),
        'dealer-settings-finance-rv'
      );

      add_settings_field(
        'finance_fees',
        'Finance Fees',
        array($this, 'finance_fees_callback_rv'),
        'dealer-settings-finance-rv',
        'finance_settings_rv'
      );

      add_settings_field(
        'finance_tax',
        'Tax',
        array($this, 'tax_callback'),
        'dealer-settings-finance-rv',
        'finance_settings_rv'
      );

      add_settings_field(
        'finance_frequency',
        'Finance Frequency',
        array($this, 'finance_frequency_callback_rv'),
        'dealer-settings-finance-rv',
        'finance_settings_rv'
      );
    } else {

      add_settings_field(
        'finance_frequency',
        'Finance Frequency',
        array($this, 'finance_frequency_callback'),
        'dealer-settings-finance',
        'finance_settings'
      );

      add_settings_field(
        'lease_frequency',
        'Lease Frequency',
        array($this, 'lease_frequency_callback'),
        'dealer-settings-lease',
        'lease_settings'
      );
    }
  }

  /**
   * Get the settings option array and print one of its values
   */


  public function logo_image_callback()
  {
    printf(
      '<input type="text" id="background_image" name="dealer-settings-branding-options[logo_image]" value="%s" />
        <input id="upload_image_button" type="button" class="add-logo-image-button button button-secondary" value="Select image" />',
      isset($this->branding_options['logo_image']) ? esc_attr($this->branding_options['logo_image']) : ''
    );

    ?>

          <?php

  }
  public function logo_footer_image_callback()
  {
    printf(
      '<input type="text" id="logo_footer_image" name="dealer-settings-branding-options[logo_footer_image]" value="%s" />
        <input id="upload_image_button_footer" type="button" class="add-logo-footer-image-button button button-secondary" value="Select image" />',
      isset($this->branding_options['logo_footer_image']) ? esc_attr($this->branding_options['logo_footer_image']) : ''
    );

    ?>

          <?php

  }

  public function socialmedia_image_callback()
  {
    printf(
      '<input type="text" id="socialmedia_image" name="dealer-settings-branding-options[socialmedia_image]" value="%s" />
        <input id="upload_image_button_social" type="button" class="add-socialmedia-image-button button button-secondary" value="Select image" />',
      isset($this->branding_options['socialmedia_image']) ? esc_attr($this->branding_options['socialmedia_image']) : ''
    );

    ?>

          <?php

  }
  public function social_review_image_callback()
  {
    printf(
      '<input type="text" id="social_review_image" name="dealer-settings-branding-options[social_review_image]" value="%s" />
        <input id="upload_image_button_review" type="button" class="add-socialmedia-image-button-review button button-secondary" value="Select image" />',
      isset($this->branding_options['social_review_image']) ? esc_attr($this->branding_options['social_review_image']) : ''
    );

    ?>

          <?php

  }

  public function tax_callback()
  {
    printf(
      '<input type="number" step="0.01" min="0" max="100" id="finance_tax" name="dealer-settings-branding-options[finance_tax]" value="%s"/>',
      isset($this->branding_options['finance_tax']) ? esc_attr($this->branding_options['finance_tax']) : ''
    );
  }

  public function finance_rate_callback_rv()
  {
    printf(
      '<input type="number" step="0.01" min="0" max="100" id="finance_rate" name="dealer-settings-branding-options[finance_rate]" value="%s"/>',
      isset($this->branding_options['finance_rate']) ? esc_attr($this->branding_options['finance_rate']) : ''
    );
  }

  public function finance_frequency_callback_rv()
  {
    if (!isset($this->branding_options['finance_frequency'])) {
      $this->branding_options['finance_frequency'] = "Bi-Weekly";
    }

    echo '<select id="finance_frequency" name="dealer-settings-branding-options[finance_frequency]">';
    if (strtolower($this->branding_options['finance_frequency']) == 'bi-weekly') {
      echo '<option selected value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option value="Weekly">Weekly</option>';
      echo '<option value="Monthly">Monthly</option>';
    } else if (strtolower($this->branding_options['finance_frequency']) == 'weekly') {
      echo '<option value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option selected value="Weekly">Weekly</option>';
      echo '<option value="Monthly">Monthly</option>';
    } else if (strtolower($this->branding_options['finance_frequency']) == 'monthly') {
      echo '<option value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option value="Weekly">Weekly</option>';
      echo '<option selected value="Monthly">Monthly</option>';
    } else {
      echo '<option value="Bi-Weekly">Bi-Weekly</option>';
      echo '<option value="Weekly">Weekly</option>';
      echo '<option value="Monthly">Monthly</option>';
    }

    echo '</select>';
  }

  public function finance_fees_callback_rv()
  {
    if (!isset($this->branding_options['finance_fees'])) {
      $this->branding_options['finance_fees'] = "Default";
    }

    echo '<select id="finance_fees" name="dealer-settings-branding-options[finance_fees]">';
    if (strtolower($this->branding_options['finance_fees']) == 'default') {
      echo '<option selected value="Default">Default</option>';
      echo '<option value="Custom">Custom</option>';
    } else if (strtolower($this->branding_options['finance_fees']) == 'custom') {
      echo '<option value="Default">Default</option>';
      echo '<option selected value="Custom">Custom</option>';
    } else {
      echo '<option value="Default">Default</option>';
      echo '<option value="Custom">Custom</option>';
    }

    echo '</select>';
  }
	public function set_data_google_sheet() {
		// Verificar el nonce para la seguridad
    check_ajax_referer('save_custom_finance_options_nonce', 'nonce');

    // Verificar permisos del usuario
    if (!current_user_can('manage_options')) {
      wp_send_json_error('Permission denied');
    }

    // Llama a la función
    setDataGoogleSheet();

}

  public function create_web_info_page(){
    // Set class property
    $this->used_finance_options = get_option('dealer-settings-web-info-options');

    ?>
      <div class="wrap">
        <h1>Website Info</h1>
        <form method="post" action="options.php">
          <?php
          settings_fields('dealer-settings-web-info-group');
          do_settings_sections('dealer-settings-web-info');
          ?>
        </form>
      </div>
			<button type="button" class="button" id="updateGoogleSheet">Update Google Sheet</button>
      <div class="card-msg" id="google-sheet-update-result"></div>
			<style>
				.card-msg {
					text-align: center;
          text-transform: capitalize;
          align-self: center;
    		}
				.msg, .msg-er {
            width: 25%;
            border: 1px solid #ccd0d4;
            border-radius: 6px;
            box-shadow: 0 1px 1px rgba(0,0,0,0.04);
            margin: 20px auto;
            color: #ffffff;
            padding: 10px;
            animation: fadeIn 1s;
            opacity: 1;
        }
        .msg {
            background-color: #508D4E;
        }
        .msg-er {
            background-color: #c60000;
        }
				@keyframes fadeIn {
					0% { opacity: 0; }
					100% { opacity: 1; }
				}
			</style>

    <?php
  }

  //* zona de informacion de los componentes

  public function register_web_info_settings()
  {
    register_setting(
      'dealer-settings-web-info-group',
      'dealer-settings-web-info-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'plugin_info',
      'Plugin Info',
      array($this, 'print_section_empty'),
      'dealer-settings-web-info'
    );

    add_settings_field(
      'plugin_version',
      'Leadbox plugin version',
      array($this, 'print_plugin_version'),
      'dealer-settings-web-info',
      'plugin_info'
    );

    add_settings_section(
      'theme_info',
      'Theme Info',
      array($this, 'print_section_empty'),
      'dealer-settings-web-info'
    );

    add_settings_field(
      'theme_name',
      'Leadbox theme name',
      array($this, 'print_theme_name'),
      'dealer-settings-web-info',
      'theme_info'
    );

    add_settings_field(
      'theme_version',
      'Leadbox theme version',
      array($this, 'print_theme_version'),
      'dealer-settings-web-info',
      'theme_info'
    );

    add_settings_section(
      'components_info',
      'Components Info',
      array($this, 'print_section_empty'),
      'dealer-settings-web-info'
    );

    add_settings_field(
      'header_version',
      'Header version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'header'
    );
    add_settings_field(
      'navigation_version',
      'Navigation version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'navigation'
    );
    add_settings_field(
      'omnisearch_version',
      'Omnisearch version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'omnisearch'
    );
    add_settings_field(
      'social-bar_version',
      'Social bar version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'social-bar'
    );

    add_settings_field(
      'footer_version',
      'Footer version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'footer'
    );
    add_settings_field(
      'hours_footer_version',
      'Hours footer version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'hours-footer'
    );
    add_settings_field(
      'lineup_version',
      'Lineup version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'lineup'
    );
    add_settings_field(
      'srp_layout_version',
      'Srp layout version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'srp-layout'
    );
    add_settings_field(
      'srp_title_version',
      'Srp title version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'srp-title'
    );
    add_settings_field(
      'srp_colorizer_version',
      'Srp colorizer version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'srp-colorizer'
    );
    add_settings_field(
      'srp_searchables_version',
      'Srp searchables version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'srp-searchables'
    );

    add_settings_field(
      'filter_version',
      'Filter version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'filter'
    );
    add_settings_field(
      'srp_finance_version',
      'Srp finance version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'srp-finance'
    );
    add_settings_field(
      'srp_lease_version',
      'Srp lease version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'srp-lease'
    );


    add_settings_field(
      'vehicle_card_version',
      'Vehicle card version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vehicle-card'
    );
    add_settings_field(
      'vdp_layout_version',
      'Vdp layout version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-layout'
    );
    add_settings_field(
      'print_vdp_layout_version',
      'Print vdp layout version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'print-vdp-layout'
    );
    add_settings_field(
      'vdp_title_version',
      'Vdp title version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-title'
    );

    add_settings_field(
      'vdp_gallery_version',
      'VDP gallery version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-gallery'
    );

    add_settings_field(
      'vdp_pricing_version',
      'VDP pricing version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-pricing'
    );
    add_settings_field(
      'vdp_finance_version',
      'Vdp finance version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-finance'
    );
    add_settings_field(
      'vdp_lease_version',
      'Vdp lease version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-lease'
    );
    add_settings_field(
      'vdp_similars_version',
      'Vdp similars version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-similars'
    );

    add_settings_field(
      'vdp_cta_version',
      'VDP CTA version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-cta'
    );
    add_settings_field(
      'vdp_disclaimer_version',
      'Vdp disclaimer version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-disclaimer'
    );
    add_settings_field(
      'vdp_vehicle_features_version',
      'Vdp vehicle-features version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-vehicle-features'
    );
    add_settings_field(
      'vdp_model_banner_version',
      'Vdp model banner version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-model-banner'
    );
    add_settings_field(
      'vdp_key_features_version',
      'Vdp key features version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-key-features'
    );
    add_settings_field(
      'vdp_installed_options_version',
      'Vdp installed options version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-installed-options'
    );
    add_settings_field(
      'vdp_sticky_header_version',
      'Vdp sticky header version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-sticky-header'
    );
    add_settings_field(
      'vdp_vehicle_description_version',
      'Vdp vehicle description version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-vehicle-description'
    );
    add_settings_field(
      'vdp_fuel_economy_version',
      'Vdp fuel economy version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-fuel-economy'
    );
    add_settings_field(
      'srp_payment_calculator_version',
      'Srp payment calculator version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'srp-payment-calculator'
    );
    add_settings_field(
      'vdp_payment_calculator_version',
      'Vdp payment calculator version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-payment-calculator'
    );
    add_settings_field(
      'vdp_upgrades_version',
      'Vdp upgrades version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'vdp-upgrades'
    );
    add_settings_field(
      'blog_list_version',
      'Blog list version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'blog-list'
    );
    add_settings_field(
      'blog_entry_meta_version',
      'Blog entry meta version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'blog-entry-meta'
    );
    add_settings_field(
      'comparison_version',
      'Comparison version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'comparison'
    );
    add_settings_field(
      'comparison_card_version',
      'Comparison card version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'comparison-card'
    );
    add_settings_field(
      'comparison_card_thumb_version',
      'Comparison card thumb version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'comparison-card-thumb'
    );
    add_settings_field(
      'comparison_card_phantom_version',
      'Comparison card phantom version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'comparison-card-phantom'
    );
    add_settings_field(
      'comparison_key_features_version',
      'Comparison key features version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'comparison-key-features'
    );
    add_settings_field(
      'comparison_key_features_title_version',
      'Comparison key features title version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'comparison-key-features-title'
    );
    add_settings_field(
      'model_trims_version',
      'Model trims version',
      array($this, 'print_component_version'),
      'dealer-settings-web-info',
      'components_info',
      'model-trims'
    );
  }
//* <------------------°°°°Fin de Seccion°°°°--------------------------->

  public function create_showroom_config_page()
  {
    // Set class property
    $this->showroom_options = get_option('dealer-settings-showroom-options');
    ?>
            <div class="wrap">
              <h1>Showroom Config</h1>
              <form method="post" action="options.php">
                <?php
                settings_fields('dealer-settings-showroom-group');
                do_settings_sections('dealer-settings-showroom');
                submit_button();
                ?>
              </form>
            </div>
          <?php
  }

  /**
   * Register and add settings
   */
  public function register_showroom_settings()
  {
    register_setting(
      'dealer-settings-showroom-group',
      'dealer-settings-showroom-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'ex_models',
      'Exclude Models',
      array($this, 'print_excluded_models_section_info'),
      'dealer-settings-showroom'
    );


    add_settings_section(
      'ex_trims',
      'Exclude Trims',
      array($this, 'print_excluded_section_info'),
      'dealer-settings-showroom'
    );

    add_settings_field(
      'excluded_models',
      'Models',
      array($this, 'excluded_models_callback'),
      'dealer-settings-showroom',
      'ex_models',
      [
        'class' => 'excluded-models-table'
      ]
    );

    add_settings_field(
      'excluded_trims',
      'Trims',
      array($this, 'excluded_trims_callback'),
      'dealer-settings-showroom',
      'ex_trims',
      [
        'class' => 'excluded-trims-table'
      ]
    );

    add_settings_section(
      'ex_categories',
      'Exclude Categories',
      array($this, 'print_excluded_categories_section_info'),
      'dealer-settings-showroom'
    );

    add_settings_field(
      'excluded_categories',
      'Categories',
      array($this, 'excluded_categories_callback'),
      'dealer-settings-showroom',
      'ex_categories',
      [
        'class' => 'excluded-categories-table'
      ]
    );

    add_settings_section(
      'exclude_sitemap',
      'Exclude Showroom Pages From Sitemap',
      array($this, 'exclude_sitemap_callback'),
      'dealer-settings-showroom'
    );
  }

  /**
   * Make a GraphQL request to Stellate API with proper error handling
   *
   * @param string $query GraphQL query string
   * @param array $variables Optional query variables
   * @return array Response array with 'success', 'data', and 'error' keys
   */
  private function makeRequest($query, $variables = array())
  {
      $cache_key = 'stellate_' . md5($query . serialize($variables));

      // Check cache first
      $cached = get_transient($cache_key);
      if ($cached !== false) {
          return $cached;
      }

      $request = wp_remote_post('https://stellate.leadboxhq.com', [
          'headers' => [
              'Content-Type' => 'application/json'
          ],
          'body' => wp_json_encode([
              'query' => $query,
              'variables' => $variables
          ]),
          'timeout' => 10  // Add timeout to prevent indefinite hangs
      ]);

      // Check for WP_Error (network failures, timeouts, etc.)
      if (is_wp_error($request)) {
          leadbox_logger()->error('GraphQL request failed', array(
              'error_message' => $request->get_error_message(),
              'error_code' => $request->get_error_code(),
              'query' => $query,
          ));

          return array(
              'success' => false,
              'error' => 'Failed to connect to OEM data service',
              'data' => null
          );
      }

      // Check HTTP status code
      $status_code = wp_remote_retrieve_response_code($request);
      if ($status_code !== 200) {
          leadbox_logger()->error('GraphQL returned non-200 status', array(
              'status_code' => $status_code,
              'query' => $query,
          ));

          return array(
              'success' => false,
              'error' => "OEM data service returned status {$status_code}",
              'data' => null
          );
      }

      // Parse JSON response
      $body = wp_remote_retrieve_body($request);
      $decoded_response = json_decode($body, true);

      if ($decoded_response === null) {
          leadbox_logger()->error('GraphQL returned invalid JSON', array(
              'json_error' => json_last_error_msg(),
              'query' => $query,
          ));

          return array(
              'success' => false,
              'error' => 'Invalid response from OEM data service',
              'data' => null
          );
      }

      // Wrap successful response in standard format
      $response = array(
          'success' => true,
          'error' => null,
          'data' => $decoded_response
      );

      // Cache successful response for 1 hour
      set_transient($cache_key, $response, HOUR_IN_SECONDS);

      return $response;
  }

  /**
   * Get model and trim data from Stellate API
   *
   * @return array|WP_Error Array of models on success, WP_Error on failure
   */
  public function getModelTrim()
  {
      $lbsettings = get_leadbox_settings();
      if ($lbsettings['all_brands'] != '') {
          $otherBrands = explode(',', $lbsettings['all_brands']);
          $otherBrands = array_map('trim', $otherBrands);
      } else {
          $otherBrands = [];
      }

      array_unshift($otherBrands, get_leadbox_manufacturer());

      $allModels = [];

      foreach ($otherBrands as $brand) {
          $query = '{
              modelLists(first: 100, where: { search: "' . esc_attr($brand) . '" }) {
                  nodes {
                      modelData {
                          model
                          year
                          trims {
                              ... on ModelTrim {
                                  title
                                  trimData {
                                      name
                                  }
                              }
                          }
                      }
                  }
              }
          }';

          $response = $this->makeRequest($query);

          // Check if the request failed
          if (isset($response['success']) && $response['success'] === false) {
              leadbox_logger()->error('Failed to fetch models for brand', array(
                  'brand' => $brand,
                  'error' => $response['error'],
              ));
              return new WP_Error(
                  'stellate_api_error',
                  $response['error'],
                  array('brand' => $brand)
              );
          }

          // Extract models from successful response
          if (isset($response['data']['data']['modelLists']['nodes'])) {
              $allModels = array_merge($allModels, $response['data']['data']['modelLists']['nodes']);
          }
      }

      return $allModels;
  }

  /**
   * Get categories from Stellate API
   *
   * @return array|WP_Error Array of categories on success, WP_Error on failure
   */
  public function getCategories()
  {
    $query = '{
      modelLists(first: 100, where: { search: "' . esc_attr(get_leadbox_manufacturer()) . '" }) {
        nodes {
          modelData {
            category
          }
        }
      }
    }';

    $response = $this->makeRequest($query);

    // Check if the request failed
    if (isset($response['success']) && $response['success'] === false) {
        leadbox_logger()->error('Failed to fetch categories for manufacturer', array(
            'manufacturer' => get_leadbox_manufacturer(),
            'error' => $response['error'],
        ));
        return new WP_Error(
            'stellate_api_error',
            $response['error']
        );
    }

    // Extract categories from successful response
    if (!isset($response['data']['data']['modelLists']['nodes'])) {
        return array();
    }

    $categories = $response['data']['data']['modelLists']['nodes'];

    $categories = collect($categories)
    ->pluck('modelData.category')
    ->flatten()
    ->unique()
    ->values()
    ->all();

    return $categories;
  }
  public function excluded_models_callback()
  {
    ?>
            <style type="text/css">
              .excluded-models-table th {
                display: none;
              }
            </style>
            <script>
              jQuery(document).ready(function() {
                  const excludedModels = jQuery('#excluded_models').val().split(',').filter(Boolean);
                  const $modelsSelector = jQuery('#models-selector');
                  const $modelsVisual = jQuery('#model-selector-visual');

                  // Cargar modelos excluidos iniciales
                  excludedModels.forEach(model => {
                      $modelsVisual.append(`<option value="${model}">${model}</option>`);
                      $modelsSelector.find(`option[value="${model}"]`).css('color', 'red');
                  });

                  // Evento para agregar/eliminar modelos
                  $modelsSelector.on('click', function(e) {
                      const value = e.target.value;
                      const isExcluded = excludedModels.includes(value);

                      if (isExcluded) {
                          $modelsVisual.find(`option[value="${value}"]`).remove();
                          $modelsSelector.find(`option[value="${value}"]`).css('color', '');
                          excludedModels.splice(excludedModels.indexOf(value), 1);
                      } else {
                          $modelsVisual.append(`<option value="${value}">${value}</option>`);
                          $modelsSelector.find(`option[value="${value}"]`).css('color', 'red');
                          excludedModels.push(value);
                      }

                      jQuery('#excluded_models').val(excludedModels.join(','));
                  });

                  // Evento para eliminar modelos desde el selector visual
                  $modelsVisual.on('click', function(e) {
                      const value = e.target.value;
                      if (excludedModels.includes(value)) {
                          $modelsVisual.find(`option[value="${value}"]`).remove();
                          $modelsSelector.find(`option[value="${value}"]`).css('color', '');
                          excludedModels.splice(excludedModels.indexOf(value), 1);
                          jQuery('#excluded_models').val(excludedModels.join(','));
                      }
                  });
              });
            </script>
            <?php
            $model = $this->getModelTrim();

            // Check if API request failed
            if (is_wp_error($model)) {
                echo '<div class="notice notice-error" style="margin: 20px 0; padding: 10px;">';
                echo '<p><strong>Unable to load OEM data:</strong> ' . esc_html($model->get_error_message()) . '</p>';
                echo '<p>The model selector is temporarily unavailable. Please try again later or contact support if the issue persists.</p>';
                echo '</div>';
                return;
            }

            $excluded_models = explode(',', $this->showroom_options['excluded_models']);
            sort($model);

            // SELECT FOR MODELS
            echo "<div style='width: 320px;display:inline-block;'><label for='models-selector' style='display: block;text-align:center;'><strong>Included Models</strong></label>";
            printf('<select name="models-selector" id="models-selector" multiple="multiple" style="height:200px;width:320px;">');
            foreach ($model as $models) {
                $model_text = $models["modelData"]["year"] . ' ' . $models["modelData"]["model"];

                // Verifica si el modelo está en la lista de excluidos
                if (in_array($model_text, $excluded_models)) {
                    // Si está excluido, aplica el estilo rojo
                    printf('<option value="' . esc_attr($model_text) . '" style="color: red;">' . esc_html($model_text) . '</option>');
                } else {
                    // Si no está excluido, muestra el option normal
                    printf('<option value="' . esc_attr($model_text) . '">' . esc_html($model_text) . '</option>');
                }
            }
            printf('</select>');
            echo "</div>";

            printf('<svg style="height:25px;width: 70px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M406.6 374.6l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224l-293.5 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288l293.5 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z"/></svg>');

            // MODELS SELECTED
            echo "<div style='width: 320px;display:inline-block;'><label for='models-selector' style='display: block;text-align:center;'><strong>Excluded Models</strong></label>";
            printf('<select name="model-selector-visual" id="model-selector-visual" multiple="multiple" style="height:200px;width:300px;">');
            printf('</select>');
            echo "</div>";

            // HIDDEN INPUT FOR MODELS
            printf(
              '<input type="hidden" id="excluded_models" name="dealer-settings-showroom-options[excluded_models]" value="%s" />',
              isset($this->showroom_options['excluded_models']) ? esc_attr($this->showroom_options['excluded_models']) : ''
            );
  }

  public function excluded_trims_callback()
  {
    ?>
            <style type="text/css">
              .excluded-trims-table th {
                display: none;
              }
            </style>
            <script>
            jQuery(document).ready(function() {
                const excludedTrims = jQuery('#excluded_trims').val().split(',').filter(Boolean);
                const $trimsSelector = jQuery('#trims-selector');
                const $trimsVisual = jQuery('#trims-selector-visual');

                // Cargar trims excluidos iniciales
                excludedTrims.forEach(trim => {
                    $trimsVisual.append(`<option value="${trim}">${trim}</option>`);
                    $trimsSelector.find(`option[value="${trim}"]`).css('color', 'red');
                });

                // Evento para agregar/eliminar trims
                $trimsSelector.on('click', function(e) {
                    const value = e.target.value;
                    const isExcluded = excludedTrims.includes(value);

                    if (isExcluded) {
                        $trimsVisual.find(`option[value="${value}"]`).remove();
                        $trimsSelector.find(`option[value="${value}"]`).css('color', '');
                        excludedTrims.splice(excludedTrims.indexOf(value), 1);
                    } else {
                        $trimsVisual.append(`<option value="${value}">${value}</option>`);
                        $trimsSelector.find(`option[value="${value}"]`).css('color', 'red');
                        excludedTrims.push(value);
                    }

                    jQuery('#excluded_trims').val(excludedTrims.join(','));
                });

                // Evento para eliminar trims desde el selector visual
                $trimsVisual.on('click', function(e) {
                    const value = e.target.value;
                    if (excludedTrims.includes(value)) {
                        $trimsVisual.find(`option[value="${value}"]`).remove();
                        $trimsSelector.find(`option[value="${value}"]`).css('color', '');
                        excludedTrims.splice(excludedTrims.indexOf(value), 1);
                        jQuery('#excluded_trims').val(excludedTrims.join(','));
                    }
                });
            });
            </script>
            <?php
            $models = $this->getModelTrim();

            // Check if API request failed
            if (is_wp_error($models)) {
                echo '<div class="notice notice-error" style="margin: 20px 0; padding: 10px;">';
                echo '<p><strong>Unable to load trim data:</strong> ' . esc_html($models->get_error_message()) . '</p>';
                echo '<p>The trim selector is temporarily unavailable. Please try again later or contact support if the issue persists.</p>';
                echo '</div>';
                return;
            }

            $excluded_models = explode(',', $this->showroom_options['excluded_models']);

            // SELECT FOR TRIMS
            echo "<div style='width: 320px;display:inline-block;'><label for='models-selector' style='display: block;text-align:center;'><strong>Included Trims</strong></label>";
            printf('<select name="trims-selector" id="trims-selector" multiple="multiple" style="height:200px;width:320px;">');
            foreach ($models as $model) {
              foreach ($model['modelData'] as $modelData) {
                if (is_array($modelData)) {

                  foreach ($modelData as $trim) {
                    $trim_text = $model["modelData"]["year"]." ".$model["modelData"]["model"] . '|' . $trim["trimData"]["name"] . '">' . $trim["title"];
                    $trim_value = $model["modelData"]["year"]." ".$model["modelData"]["model"] . '|' . $trim["trimData"]["name"];
                    $trim_label = $trim["title"];

                    if (in_array($trim_text, $excluded_models)) {
                      printf('<option value="' . esc_attr($trim_value) . '" style="color: red;">' . esc_html($trim_label) . '</option>');
                    } else {
                      printf('<option value="' . esc_attr($trim_value) . '">' . esc_html($trim_label) . '</option>');
                    }
                  }
                }
              }
            }
            printf('</select>');
            echo "</div>";

            printf('<svg style="height:25px;width: 70px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M406.6 374.6l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224l-293.5 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288l293.5 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z"/></svg>');

            // TRIMS SELECTED
            echo "<div style='width: 320px;display:inline-block;'><label for='models-selector' style='display: block;text-align:center;'><strong>Excluded Trims</strong></label>";
            printf('<select name="trims-selector-visual" id="trims-selector-visual" multiple="multiple" style="height:200px;width:300px;">');
            printf('</select>');
            echo "</div>";

            // HIDDEN INPUT FOR TRIMS
            printf(
              '<input type="hidden" id="excluded_trims" name="dealer-settings-showroom-options[excluded_trims]" value="%s" />',
              isset($this->showroom_options['excluded_trims']) ? esc_attr($this->showroom_options['excluded_trims']) : ''
            );
  }

  public function excluded_categories_callback()
  {
    ?>
            <style type="text/css">
              .excluded-categories-table th {
                display: none;
              }
            </style>
            <script>
            jQuery(document).ready(function() {
                const excludedCategories = jQuery('#excluded_categories').val().split(',').filter(Boolean);
                const $categoriesSelector = jQuery('#categories-selector');
                const $categoriesVisual = jQuery('#categories-selector-visual');

                // Cargar categorías excluidas iniciales
                excludedCategories.forEach(category => {
                    $categoriesVisual.append(`<option value="${category}">${category}</option>`);
                    $categoriesSelector.find(`option[value="${category}"]`).css('color', 'red');
                });

                // Evento para agregar/eliminar categorías
                $categoriesSelector.on('click', function(e) {
                    const value = e.target.value;
                    const isExcluded = excludedCategories.includes(value);

                    if (isExcluded) {
                        $categoriesVisual.find(`option[value="${value}"]`).remove();
                        $categoriesSelector.find(`option[value="${value}"]`).css('color', '');
                        excludedCategories.splice(excludedCategories.indexOf(value), 1);
                    } else {
                        $categoriesVisual.append(`<option value="${value}">${value}</option>`);
                        $categoriesSelector.find(`option[value="${value}"]`).css('color', 'red');
                        excludedCategories.push(value);
                    }

                    jQuery('#excluded_categories').val(excludedCategories.join(','));
                });

                // Evento para eliminar categorías desde el selector visual
                $categoriesVisual.on('click', function(e) {
                    const value = e.target.value;
                    if (excludedCategories.includes(value)) {
                        $categoriesVisual.find(`option[value="${value}"]`).remove();
                        $categoriesSelector.find(`option[value="${value}"]`).css('color', '');
                        excludedCategories.splice(excludedCategories.indexOf(value), 1);
                        jQuery('#excluded_categories').val(excludedCategories.join(','));
                    }
                });
            });
            </script>
            <?php
            $categories = $this->getCategories();

            // Check if API request failed
            if (is_wp_error($categories)) {
                echo '<div class="notice notice-error" style="margin: 20px 0; padding: 10px;">';
                echo '<p><strong>Unable to load category data:</strong> ' . esc_html($categories->get_error_message()) . '</p>';
                echo '<p>The category selector is temporarily unavailable. Please try again later or contact support if the issue persists.</p>';
                echo '</div>';
                return;
            }

            // SELECT FOR CATEGORIES
            echo "<div style='width: 320px;display:inline-block;'><label for='models-selector' style='display: block;text-align:center;'><strong>Categories</strong></label>";
            printf('<select name="categories-selector" id="categories-selector" multiple="multiple" style="height:200px;width:320px;">');
            foreach ($categories as $category) {
              printf('<option value="' . esc_attr($category) . '">' . esc_html($category) . '</option>');
            }
            printf('</select>');
            echo "</div>";

            printf('<svg style="height:25px;width: 70px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M406.6 374.6l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224l-293.5 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288l293.5 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z"/></svg>');

            // TRIMS SELECTED
            echo "<div style='width: 320px;display:inline-block;'><label for='models-selector' style='display: block;text-align:center;'><strong>Excluded Categories</strong></label>";
            printf('<select name="categories-selector-visual" id="categories-selector-visual" multiple="multiple" style="height:200px;width:300px;">');
            printf('</select>');
            echo "</div>";

            // HIDDEN INPUT FOR TRIMS
            printf(
              '<input type="hidden" id="excluded_categories" name="dealer-settings-showroom-options[excluded_categories]" value="%s" />',
              isset($this->showroom_options['excluded_categories']) ? esc_attr($this->showroom_options['excluded_categories']) : ''
            );
  }

  public function exclude_sitemap_callback()
  {
    if (!isset($this->showroom_options['excluded_from_sitemap'])) {
      $this->showroom_options['excluded_from_sitemap'] = "Disabled";
    }

    echo '<select id="excluded_from_sitemap" name="dealer-settings-showroom-options[excluded_from_sitemap]">';
    if (strtolower($this->showroom_options['excluded_from_sitemap']) == 'disabled') {
      echo '<option selected value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else if (strtolower($this->showroom_options['excluded_from_sitemap']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }

  /**
   * Register and add VDP Payment settings
   */
  public function register_vdp_payment_settings()
  {
    register_setting(
      'dealer-settings-vdp-payment-group',
      'dealer-settings-vdp-payment-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'vdp_payment_settings',
      '',
      array($this, 'print_vdp_payment_section_info'),
      'dealer-settings-vdp-payment'
    );

    add_settings_field(
      'default_downpayment',
      'Default Downpayment',
      array($this, 'default_downpayment_callback'),
      'dealer-settings-vdp-payment',
      'vdp_payment_settings'
    );

    add_settings_field(
      'payment_type',
      'Payment Type',
      array($this, 'payment_type_callback'),
      'dealer-settings-vdp-payment',
      'vdp_payment_settings'
    );
  }

  /**
   * Create VDP Payment Settings page
   */
  public function create_vdp_payment_page()
  {
    // Set class property
    $this->vdp_payment_options = get_option('dealer-settings-vdp-payment-options');
    ?>
            <div class="wrap">
              <h1>VDP Payment Settings</h1>
              <form method="post" action="options.php">
                <?php
                settings_fields('dealer-settings-vdp-payment-group');
                do_settings_sections('dealer-settings-vdp-payment');
                submit_button();
                ?>
              </form>
            </div>
          <?php
  }

  /**
   * Print VDP Payment section info
   */
  public function print_vdp_payment_section_info()
  {
    print '';
  }

  /**
   * Default Downpayment callback
   */
  public function default_downpayment_callback()
  {
    printf(
      '<input type="number" id="default_downpayment" name="dealer-settings-vdp-payment-options[vdp_default_downpayment]" value="%s" step="0.01" min="0" />',
      isset($this->vdp_payment_options['vdp_default_downpayment']) ? esc_attr($this->vdp_payment_options['vdp_default_downpayment']) : '0'
    );
    echo '<p class="description">Enter the default downpayment amount (e.g., 5000.00)</p>';
  }

  /**
   * Payment Type callback
   */
  public function payment_type_callback()
  {
    $selected = isset($this->vdp_payment_options['vdp_default_payment_type']) ? $this->vdp_payment_options['vdp_default_payment_type'] : 'lease';
    ?>
    <select id="payment_type" name="dealer-settings-vdp-payment-options[vdp_default_payment_type]">
      <option value="lease" <?php selected($selected, 'lease'); ?>>Lease</option>
      <option value="finance" <?php selected($selected, 'finance'); ?>>Finance</option>
    </select>
    <p class="description">Select the default payment type for VDP pages</p>
    <?php
  }

  public function print_plugin_version()
  {
    $path = plugin_dir_path(__DIR__) . 'Leadbox.php';
    $plugin_data = get_plugin_data($path);
    echo $plugin_data['Version'];
  }

  public function print_theme_name()
  {
    $my_theme = wp_get_theme();
    echo $my_theme['Name'];
  }

  public function print_theme_version()
  {
    $my_theme = wp_get_theme();
    echo $my_theme['Version'];
  }

  public function print_component_version($component)
  {
    $childPartial = get_stylesheet_directory() . '/views/partials/' . $component . '.blade.php';
    $childCl = get_stylesheet_directory() . '/views/cl/' . $component;

    if (hasChild()) {
      if (file_exists($childPartial)) {
        echo GENIUS[$component]['version'] . ' (Custom)';
      } else if (file_exists($childCl)) {
        echo GENIUS[$component]['version'] . ' (Custom)';
      } else {
        echo GENIUS[$component]['version'];
      }
    } else {
      if (file_exists($childPartial)) {
        echo GENIUS[$component]['version'];
      } else if (file_exists($childCl)) {
        echo GENIUS[$component]['version'];
      } else {
        echo GENIUS[$component]['version'];
      }
    }
  }

  public function create_used_finance_page()
  {
    // Set class property
    $this->used_finance_options = get_option('dealer-settings-used-finance-options');
    ?>
            <div class="wrap">
              <h1>Used Finance</h1>
              <form method="post" action="options.php">
                <?php

                settings_fields('dealer-settings-used-finance-group');
                do_settings_sections('dealer-settings-used-finance');
                submit_button();

                ?>
              </form>
            </div>
          <?php
  }

  public function enable_first_section_callback()
  {
    if (!isset($this->used_finance_options['section_one_status'])) {
      $this->used_finance_options['section_one_status'] = "Disabled";
    }

    echo '<select id="section_one_status" name="dealer-settings-used-finance-options[section_one_status]">';
    if (strtolower($this->used_finance_options['section_one_status']) == 'disabled') {
      echo '<option selected value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else if (strtolower($this->used_finance_options['section_one_status']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }


  public function register_used_finance_settings()
  {
    register_setting(
      'dealer-settings-used-finance-group',
      'dealer-settings-used-finance-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'used_finance',
      'Used Finance',
      array($this, 'print_section_info'),
      'dealer-settings-used-finance'
    );

    add_settings_field(
      'section_one_status',
      'Status',
      array($this, 'enable_first_section_callback'),
      'dealer-settings-used-finance',
      'used_finance'
    );

    add_settings_section(
      'finance',
      '1 year old to 4 years old',
      array($this, 'print_section_info'),
      'dealer-settings-used-finance'
    );

    add_settings_field(
      'section_one_term',
      'Default Finance Term',
      array($this, 'finance_term_section_one_callback'),
      'dealer-settings-used-finance',
      'finance'
    );

    add_settings_field(
      'section_one_downpayment',
      'Default Finance Downpayment',
      array($this, 'finance_downpayment_section_one_callback'),
      'dealer-settings-used-finance',
      'finance'
    );

    add_settings_section(
      'finance-oldest',
      '5 years old to 15 years old',
      array($this, 'print_section_info'),
      'dealer-settings-used-finance'
    );

    add_settings_field(
      'section_one_term',
      'Default Finance Term',
      array($this, 'finance_term_section_two_callback'),
      'dealer-settings-used-finance',
      'finance-oldest'
    );

    add_settings_field(
      'section_one_downpayment',
      'Default Finance Downpayment',
      array($this, 'finance_downpayment_section_two_callback'),
      'dealer-settings-used-finance',
      'finance-oldest'
    );
  }

  public function finance_rate_section_one_callback()
  {
    printf(
      '<input type="number" id="section_one_rate" name="dealer-settings-used-finance-options[section_one_rate]" value="%s" />(Percent)',
      isset($this->used_finance_options['section_one_rate']) ? esc_attr($this->used_finance_options['section_one_rate']) : ''
    );
  }

  public function finance_term_section_one_callback()
  {
    printf(
      '<input type="number" id="section_one_term" name="dealer-settings-used-finance-options[section_one_term]" value="%s" />(Months)',
      isset($this->used_finance_options['section_one_term']) ? esc_attr($this->used_finance_options['section_one_term']) : ''
    );
  }

  public function finance_downpayment_section_one_callback()
  {
    printf(
      '<input type="number" id="section_one_downpayment" name="dealer-settings-used-finance-options[section_one_downpayment]" value="%s" />($)',
      isset($this->used_finance_options['section_one_downpayment']) ? esc_attr($this->used_finance_options['section_one_downpayment']) : ''
    );
  }


  public function finance_rate_section_two_callback()
  {
    printf(
      '<input type="number" id="section_two_rate" name="dealer-settings-used-finance-options[section_two_rate]" value="%s" />(Percent)',
      isset($this->used_finance_options['section_two_rate']) ? esc_attr($this->used_finance_options['section_two_rate']) : ''
    );
  }

  public function finance_term_section_two_callback()
  {
    printf(
      '<input type="number" id="section_two_term" name="dealer-settings-used-finance-options[section_two_term]" value="%s" />(Months)',
      isset($this->used_finance_options['section_two_term']) ? esc_attr($this->used_finance_options['section_two_term']) : ''
    );
  }

  public function finance_downpayment_section_two_callback()
  {
    printf(
      '<input type="number" id="section_two_downpayment" name="dealer-settings-used-finance-options[section_two_downpayment]" value="%s" />($)',
      isset($this->used_finance_options['section_two_downpayment']) ? esc_attr($this->used_finance_options['section_two_downpayment']) : ''
    );
  }

  /**
   * Options page callback
   */
  public function create_hours_page()
  {
    // Set class property
    $this->hours_options = get_option('dealer-settings-hours-options');
    ?>
            <div class="wrap">
              <h1>Hours</h1>
              <form method="post" action="options.php">
                <?php

                settings_fields('dealer-settings-hours-options-group');
                do_settings_sections('dealer-settings-hours');
                submit_button();

                ?>
              </form>
            </div>
          <?php
  }

  /**
   * Register and add settings
   */
  public function register_hours_settings()
  {
    register_setting(
      'dealer-settings-hours-options-group',
      'dealer-settings-hours-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'hours',
      'Hours',
      array($this, 'print_section_info'),
      'dealer-settings-hours'
    );

    add_settings_field(
      'sale_hours_monday',
      'Sales Hours',
      array($this, 'sale_hours_callback'),
      'dealer-settings-hours',
      'hours'
    );

    add_settings_field(
      'sale_hours_tuesday',
      'Sales Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );


    add_settings_field(
      'sale_hours_wednesday',
      'Sales Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'sale_hours_thursday',
      'Sales Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'sale_hours_friday',
      'Sales Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'sale_hours_saturday',
      'Sales Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'sale_hours_sunday',
      'Sales Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'service_hours_monday',
      'Service Hours',
      array($this, 'service_hours_callback'),
      'dealer-settings-hours',
      'hours'
    );

    add_settings_field(
      'service_hours_tuesday',
      'Service Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'service_hours_wednesday',
      'Service Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'service_hours_thursday',
      'Service Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'service_hours_friday',
      'Service Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'service_hours_saturday',
      'Service Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'service_hours_sunday',
      'Service Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'parts_hours_monday',
      'Parts Hours',
      array($this, 'parts_hours_callback'),
      'dealer-settings-hours',
      'hours'
    );

    add_settings_field(
      'parts_hours_tuesday',
      'Parts Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'parts_hours_wednesday',
      'Parts Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'parts_hours_thursday',
      'Parts Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'parts_hours_friday',
      'Parts Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'parts_hours_saturday',
      'Parts Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'parts_hours_sunday',
      'Parts Hours',
      array($this, 'echo_nothing'),
      'dealer-settings-hours',
      'hours',
      array('class' => 'hidden')
    );

    add_settings_field(
      'additionalone_hours_monday',
      'Additional Hours 1',
      array($this, 'additionalone_hours_callback'),
      'dealer-settings-hours',
      'hours'
    );
    add_settings_field(
      'additionaltwo_hours_monday',
      'Additional Hours 2',
      array($this, 'additionaltwo_hours_callback'),
      'dealer-settings-hours',
      'hours'
    );
    add_settings_field(
      'additionalthree_hours_monday',
      'Additional Hours 3',
      array($this, 'additionalthree_hours_callback'),
      'dealer-settings-hours',
      'hours'
    );
    add_settings_field(
      'hours_disclaimer',
      'Hours Disclaimer',
      array($this, 'hours_disclaimer_callback'),
      'dealer-settings-hours',
      'hours'
    );
  }

  public function get_hours_options($selected = NULL){
    $hours_options = '';
    foreach ($this->hour_range_options as $hour_range_option) {
      $hours_options .= '<option '. (isset($selected) && strtolower(str_replace(' ', '', $selected)) == strtolower(str_replace(' ', '', $hour_range_option)) ? ' selected '  : '').' value="' . $hour_range_option . '">' . $hour_range_option . '</option>';
    }

    return $hours_options;
  }

  public function sale_hours_callback()
  {
    ?>
            <style type="text/css">
              .tg {
                border-collapse: collapse;
                border-spacing: 0;
                width: 100%
              }

              .tg td {
                padding: 10px 5px;
                border-color: #ccc;
                border-style: solid;
                border-width: 1px;
                overflow: hidden;
                word-break: normal;
              }

              .tg th {
                font-weight: normal;
                padding: 10px 5px;
                border-color: #ccc;
                border-style: solid;
                border-width: 1px;
                overflow: hidden;
                word-break: normal;
              }

              .tg .tg-baqh {
                text-align: center;
                vertical-align: top;
                color: #999
              }

              .tg .tg-0lax {
                text-align: center;
                vertical-align: top
              }

              .tg .tg-0lax input[^type=checkbox] {
                width: 110px;
              }
            </style>
            <script>
              jQuery(document).ready(function() {
                jQuery('#sale_hours_monday_closed').click(function() {
                  var disabled = jQuery('#sale_hours_monday_start').prop('disabled');
                  jQuery('#sale_hours_monday_start').prop('disabled', !disabled);
                  jQuery('#sale_hours_monday_end').prop('disabled', !disabled);
                });
                jQuery('#sale_hours_thursday_closed').click(function() {
                  var disabled = jQuery('#sale_hours_thursday_start').prop('disabled');
                  jQuery('#sale_hours_thursday_start').prop('disabled', !disabled);
                  jQuery('#sale_hours_thursday_end').prop('disabled', !disabled);
                });
                jQuery('#sale_hours_wednesday_closed').click(function() {
                  var disabled = jQuery('#sale_hours_wednesday_start').prop('disabled');
                  jQuery('#sale_hours_wednesday_start').prop('disabled', !disabled);
                  jQuery('#sale_hours_wednesday_end').prop('disabled', !disabled);
                });
                jQuery('#sale_hours_tuesday_closed').click(function() {
                  var disabled = jQuery('#sale_hours_tuesday_start').prop('disabled');
                  jQuery('#sale_hours_tuesday_start').prop('disabled', !disabled);
                  jQuery('#sale_hours_tuesday_end').prop('disabled', !disabled);
                });
                jQuery('#sale_hours_friday_closed').click(function() {
                  var disabled = jQuery('#sale_hours_friday_start').prop('disabled');
                  jQuery('#sale_hours_friday_start').prop('disabled', !disabled);
                  jQuery('#sale_hours_friday_end').prop('disabled', !disabled);
                });
                jQuery('#sale_hours_saturday_closed').click(function() {
                  var disabled = jQuery('#sale_hours_saturday_start').prop('disabled');
                  jQuery('#sale_hours_saturday_start').prop('disabled', !disabled);
                  jQuery('#sale_hours_saturday_end').prop('disabled', !disabled);
                });
                jQuery('#sale_hours_sunday_closed').click(function() {
                  var disabled = jQuery('#sale_hours_sunday_start').prop('disabled');
                  jQuery('#sale_hours_sunday_start').prop('disabled', !disabled);
                  jQuery('#sale_hours_sunday_end').prop('disabled', !disabled);
                });
              });
              jQuery(document).ready(function() {
                jQuery('#service_hours_monday_closed').click(function() {
                  var disabled = jQuery('#service_hours_monday_start').prop('disabled');
                  jQuery('#service_hours_monday_start').prop('disabled', !disabled);
                  jQuery('#service_hours_monday_end').prop('disabled', !disabled);
                });
                jQuery('#service_hours_thursday_closed').click(function() {
                  var disabled = jQuery('#service_hours_thursday_start').prop('disabled');
                  jQuery('#service_hours_thursday_start').prop('disabled', !disabled);
                  jQuery('#service_hours_thursday_end').prop('disabled', !disabled);
                });
                jQuery('#service_hours_wednesday_closed').click(function() {
                  var disabled = jQuery('#service_hours_wednesday_start').prop('disabled');
                  jQuery('#service_hours_wednesday_start').prop('disabled', !disabled);
                  jQuery('#service_hours_wednesday_end').prop('disabled', !disabled);
                });
                jQuery('#service_hours_tuesday_closed').click(function() {
                  var disabled = jQuery('#service_hours_tuesday_start').prop('disabled');
                  jQuery('#service_hours_tuesday_start').prop('disabled', !disabled);
                  jQuery('#service_hours_tuesday_end').prop('disabled', !disabled);
                });
                jQuery('#service_hours_friday_closed').click(function() {
                  var disabled = jQuery('#service_hours_friday_start').prop('disabled');
                  jQuery('#service_hours_friday_start').prop('disabled', !disabled);
                  jQuery('#service_hours_friday_end').prop('disabled', !disabled);
                });
                jQuery('#service_hours_saturday_closed').click(function() {
                  var disabled = jQuery('#service_hours_saturday_start').prop('disabled');
                  jQuery('#service_hours_saturday_start').prop('disabled', !disabled);
                  jQuery('#service_hours_saturday_end').prop('disabled', !disabled);
                });
                jQuery('#service_hours_sunday_closed').click(function() {
                  var disabled = jQuery('#service_hours_sunday_start').prop('disabled');
                  jQuery('#service_hours_sunday_start').prop('disabled', !disabled);
                  jQuery('#service_hours_sunday_end').prop('disabled', !disabled);
                });
              });
              jQuery(document).ready(function() {
                jQuery('#parts_hours_monday_closed').click(function() {
                  var disabled = jQuery('#parts_hours_monday_start').prop('disabled');
                  jQuery('#parts_hours_monday_start').prop('disabled', !disabled);
                  jQuery('#parts_hours_monday_end').prop('disabled', !disabled);
                });
                jQuery('#parts_hours_thursday_closed').click(function() {
                  var disabled = jQuery('#parts_hours_thursday_start').prop('disabled');
                  jQuery('#parts_hours_thursday_start').prop('disabled', !disabled);
                  jQuery('#parts_hours_thursday_end').prop('disabled', !disabled);
                });
                jQuery('#parts_hours_wednesday_closed').click(function() {
                  var disabled = jQuery('#parts_hours_wednesday_start').prop('disabled');
                  jQuery('#parts_hours_wednesday_start').prop('disabled', !disabled);
                  jQuery('#parts_hours_wednesday_end').prop('disabled', !disabled);
                });
                jQuery('#parts_hours_tuesday_closed').click(function() {
                  var disabled = jQuery('#parts_hours_tuesday_start').prop('disabled');
                  jQuery('#parts_hours_tuesday_start').prop('disabled', !disabled);
                  jQuery('#parts_hours_tuesday_end').prop('disabled', !disabled);
                });
                jQuery('#parts_hours_friday_closed').click(function() {
                  var disabled = jQuery('#parts_hours_friday_start').prop('disabled');
                  jQuery('#parts_hours_friday_start').prop('disabled', !disabled);
                  jQuery('#parts_hours_friday_end').prop('disabled', !disabled);
                });
                jQuery('#parts_hours_saturday_closed').click(function() {
                  var disabled = jQuery('#parts_hours_saturday_start').prop('disabled');
                  jQuery('#parts_hours_saturday_start').prop('disabled', !disabled);
                  jQuery('#parts_hours_saturday_end').prop('disabled', !disabled);
                });
                jQuery('#parts_hours_sunday_closed').click(function() {
                  var disabled = jQuery('#parts_hours_sunday_start').prop('disabled');
                  jQuery('#parts_hours_sunday_start').prop('disabled', !disabled);
                  jQuery('#parts_hours_sunday_end').prop('disabled', !disabled);
                });
              });
            </script>
            <table class="tg">
              <tr>
                <th class="tg-baqh">Monday<br></th>
                <th class="tg-baqh">Tuesday</th>
                <th class="tg-baqh">Wednesday</th>
                <th class="tg-baqh">Thursday</th>
                <th class="tg-baqh">Friday</th>
                <th class="tg-baqh">Saturday</th>
                <th class="tg-baqh">Sunday</th>
              </tr>
              <tr>
                <td class="tg-0lax">
                  <label for="sale_hours_monday_start">Start:</label>
                  <?php
                    $sale_hours_monday_start = $this->get_hours_options( isset($this->hours_options['sale_hours_monday_start']) ? $this->hours_options['sale_hours_monday_start'] : NULL);
                    printf(
                        '<select id="sale_hours_monday_start" name="dealer-settings-hours-options[sale_hours_monday_start]" %s>%s</select>',
                        $this->hours_options['sale_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                        $sale_hours_monday_start
                      );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_monday_end">End:</label>
                  <?php
                    $sale_hours_monday_end = $this->get_hours_options( isset($this->hours_options['sale_hours_monday_end']) ? $this->hours_options['sale_hours_monday_end'] : NULL);
                    printf(
                      '<select id="sale_hours_monday_end" name="dealer-settings-hours-options[sale_hours_monday_end]" %s>%s</select>',
                      $this->hours_options['sale_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_monday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_monday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[sale_hours_monday_closed]" type="checkbox" id="sale_hours_monday_closed" value="checked" %s>',
                      $this->hours_options['sale_hours_monday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="sale_hours_tuesday_start">Start:</label>
                  <?php
                    $sale_hours_tuesday_start = $this->get_hours_options( isset($this->hours_options['sale_hours_tuesday_start']) ? $this->hours_options['sale_hours_tuesday_start'] : NULL);
                    printf(
                      '<select id="sale_hours_tuesday_start" name="dealer-settings-hours-options[sale_hours_tuesday_start]" %s>%s</select>',
                      $this->hours_options['sale_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_tuesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_tuesday_end">End:</label>
                  <?php
                    $sale_hours_tuesday_end = $this->get_hours_options( isset($this->hours_options['sale_hours_tuesday_end']) ? $this->hours_options['sale_hours_tuesday_end'] : NULL);
                    printf(
                      '<select id="sale_hours_tuesday_end" name="dealer-settings-hours-options[sale_hours_tuesday_end]" %s>%s</select>',
                      $this->hours_options['sale_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_tuesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_tuesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[sale_hours_tuesday_closed]" type="checkbox" id="sale_hours_tuesday_closed" value="checked" %s>',
                      $this->hours_options['sale_hours_tuesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="sale_hours_wednesday_start">Start:</label>
                  <?php
                    $sale_hours_wednesday_start = $this->get_hours_options( isset($this->hours_options['sale_hours_wednesday_start']) ? $this->hours_options['sale_hours_wednesday_start'] : NULL);
                    printf(
                      '<select id="sale_hours_wednesday_start" name="dealer-settings-hours-options[sale_hours_wednesday_start]" %s>%s</select>',
                      $this->hours_options['sale_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_wednesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_wednesday_end">End:</label>
                  <?php
                    $sale_hours_wednesday_end = $this->get_hours_options( isset($this->hours_options['sale_hours_wednesday_end']) ? $this->hours_options['sale_hours_wednesday_end'] : NULL);
                    printf(
                      '<select id="sale_hours_wednesday_end" name="dealer-settings-hours-options[sale_hours_wednesday_end]" %s>%s</select>',
                      $this->hours_options['sale_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_wednesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_wednesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[sale_hours_wednesday_closed]" type="checkbox" id="sale_hours_wednesday_closed" value="checked" %s>',
                      $this->hours_options['sale_hours_wednesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="sale_hours_thursday_start">Start:</label>
                  <?php
                    $sale_hours_thursday_start = $this->get_hours_options( isset($this->hours_options['sale_hours_thursday_start']) ? $this->hours_options['sale_hours_thursday_start'] : NULL);
                    printf(
                      '<select id="sale_hours_thursday_start" name="dealer-settings-hours-options[sale_hours_thursday_start]" %s>%s</select>',
                      $this->hours_options['sale_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_thursday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_thursday_end">End:</label>
                  <?php
                    $sale_hours_thursday_end = $this->get_hours_options( isset($this->hours_options['sale_hours_thursday_end']) ? $this->hours_options['sale_hours_thursday_end'] : NULL);
                    printf(
                      '<select id="sale_hours_thursday_end" name="dealer-settings-hours-options[sale_hours_thursday_end]" %s>%s</select>',
                      $this->hours_options['sale_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_thursday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_thursday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[sale_hours_thursday_closed]" type="checkbox" id="sale_hours_thursday_closed" value="checked" %s>',
                      $this->hours_options['sale_hours_thursday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="sale_hours_friday_start">Start:</label>
                  <?php
                    $sale_hours_friday_start = $this->get_hours_options( isset($this->hours_options['sale_hours_friday_start']) ? $this->hours_options['sale_hours_friday_start'] : NULL);
                    printf(
                      '<select id="sale_hours_friday_start" name="dealer-settings-hours-options[sale_hours_friday_start]" %s>%s</select>',
                      $this->hours_options['sale_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_friday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_friday_end">End:</label>
                  <?php
                    $sale_hours_friday_end = $this->get_hours_options( isset($this->hours_options['sale_hours_friday_end']) ? $this->hours_options['sale_hours_friday_end'] : NULL);
                    printf(
                      '<select id="sale_hours_friday_end" name="dealer-settings-hours-options[sale_hours_friday_end]" %s>%s</select>',
                      $this->hours_options['sale_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_friday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_friday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[sale_hours_friday_closed]" type="checkbox" id="sale_hours_friday_closed" value="checked" %s>',
                      $this->hours_options['sale_hours_friday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="sale_hours_saturday_start">Start:</label>
                  <?php
                    $sale_hours_saturday_start = $this->get_hours_options( isset($this->hours_options['sale_hours_saturday_start']) ? $this->hours_options['sale_hours_saturday_start'] : NULL);
                    printf(
                      '<select id="sale_hours_saturday_start" name="dealer-settings-hours-options[sale_hours_saturday_start]" %s>%s</select>',
                      $this->hours_options['sale_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_saturday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_saturday_end">End:</label>
                  <?php
                    $sale_hours_saturday_end = $this->get_hours_options( isset($this->hours_options['sale_hours_saturday_end']) ? $this->hours_options['sale_hours_saturday_end'] : NULL);
                    printf(
                      '<select id="sale_hours_saturday_end" name="dealer-settings-hours-options[sale_hours_saturday_end]" %s>%s</select>',
                      $this->hours_options['sale_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_saturday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_saturday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[sale_hours_saturday_closed]" type="checkbox" id="sale_hours_saturday_closed" value="checked" %s>',
                      $this->hours_options['sale_hours_saturday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="sale_hours_sunday_start">Start:</label>
                  <?php
                    $sale_hours_sunday_start = $this->get_hours_options( isset($this->hours_options['sale_hours_sunday_start']) ? $this->hours_options['sale_hours_sunday_start'] : NULL);
                    printf(
                      '<select id="sale_hours_sunday_start" name="dealer-settings-hours-options[sale_hours_sunday_start]" %s>%s</select>',
                      $this->hours_options['sale_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_sunday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_sunday_end">End:</label>
                  <?php
                    $sale_hours_sunday_end = $this->get_hours_options( isset($this->hours_options['sale_hours_sunday_end']) ? $this->hours_options['sale_hours_sunday_end'] : NULL);
                    printf(
                      '<select id="sale_hours_sunday_end" name="dealer-settings-hours-options[sale_hours_sunday_end]" %s>%s</select>',
                      $this->hours_options['sale_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $sale_hours_sunday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="sale_hours_sunday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[sale_hours_sunday_closed]" type="checkbox" id="sale_hours_sunday_closed" value="checked" %s>',
                      $this->hours_options['sale_hours_sunday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
              </tr>
            </table>
          <?php
  }
  public function service_hours_callback()
  {

    if (!isset($this->hours_options['servicehourstatus'])) {
      $this->hours_options['servicehourstatus'] = "Disabled";
    }

    echo 'Status: <select id="servicehourstatus" name="dealer-settings-hours-options[servicehourstatus]">';
    if (strtolower($this->hours_options['servicehourstatus']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->hours_options['servicehourstatus']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select><br/><br/>';
    ?>
            <table class="tg">
              <tr>
                <th class="tg-baqh">Monday<br></th>
                <th class="tg-baqh">Tuesday</th>
                <th class="tg-baqh">Wednesday</th>
                <th class="tg-baqh">Thursday</th>
                <th class="tg-baqh">Friday</th>
                <th class="tg-baqh">Saturday</th>
                <th class="tg-baqh">Sunday</th>
              </tr>
              <tr>
                <td class="tg-0lax">
                  <label for="service_hours_monday_start">Start:</label>
                  <?php
                    $service_hours_monday_start = $this->get_hours_options( isset($this->hours_options['service_hours_monday_start']) ? $this->hours_options['service_hours_monday_start'] : NULL);
                    printf(
                      '<select id="service_hours_monday_start" name="dealer-settings-hours-options[service_hours_monday_start]" %s>%s</select>',
                      $this->hours_options['service_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_monday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_monday_end">End:</label>
                  <?php
                    $service_hours_monday_end = $this->get_hours_options( isset($this->hours_options['service_hours_monday_end']) ? $this->hours_options['service_hours_monday_end'] : NULL);
                    printf(
                      '<select id="service_hours_monday_end" name="dealer-settings-hours-options[service_hours_monday_end]" %s>%s</select>',
                      $this->hours_options['service_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_monday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_monday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[service_hours_monday_closed]" type="checkbox" id="service_hours_monday_closed" value="checked" %s>',
                      $this->hours_options['service_hours_monday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="service_hours_tuesday_start">Start:</label>
                  <?php
                    $service_hours_tuesday_start = $this->get_hours_options( isset($this->hours_options['service_hours_tuesday_start']) ? $this->hours_options['service_hours_tuesday_start'] : NULL);
                    printf(
                      '<select id="service_hours_tuesday_start" name="dealer-settings-hours-options[service_hours_tuesday_start]" %s>%s</select>',
                      $this->hours_options['service_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_tuesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_tuesday_end">End:</label>
                  <?php
                    $service_hours_tuesday_end = $this->get_hours_options( isset($this->hours_options['service_hours_tuesday_end']) ? $this->hours_options['service_hours_tuesday_end'] : NULL);
                    printf(
                      '<select id="service_hours_tuesday_end" name="dealer-settings-hours-options[service_hours_tuesday_end]" %s>%s</select>',
                      $this->hours_options['service_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_tuesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_tuesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[service_hours_tuesday_closed]" type="checkbox" id="service_hours_tuesday_closed" value="checked" %s>',
                      $this->hours_options['service_hours_tuesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="service_hours_wednesday_start">Start:</label>
                  <?php
                    $service_hours_wednesday_start = $this->get_hours_options( isset($this->hours_options['service_hours_wednesday_start']) ? $this->hours_options['service_hours_wednesday_start'] : NULL);
                    printf(
                      '<select id="service_hours_wednesday_start" name="dealer-settings-hours-options[service_hours_wednesday_start]" %s>%s</select>',
                      $this->hours_options['service_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_wednesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_wednesday_end">End:</label>
                  <?php
                    $service_hours_wednesday_end = $this->get_hours_options( isset($this->hours_options['service_hours_wednesday_end']) ? $this->hours_options['service_hours_wednesday_end'] : NULL);
                    printf(
                      '<select id="service_hours_wednesday_end" name="dealer-settings-hours-options[service_hours_wednesday_end]" %s>%s</select>',
                      $this->hours_options['service_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_wednesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_wednesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[service_hours_wednesday_closed]" type="checkbox" id="service_hours_wednesday_closed" value="checked" %s>',
                      $this->hours_options['service_hours_wednesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="service_hours_thursday_start">Start:</label>
                  <?php
                    $service_hours_thursday_start = $this->get_hours_options( isset($this->hours_options['service_hours_thursday_start']) ? $this->hours_options['service_hours_thursday_start'] : NULL);
                    printf(
                      '<select id="service_hours_thursday_start" name="dealer-settings-hours-options[service_hours_thursday_start]" %s>%s</select>',
                      $this->hours_options['service_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_thursday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_thursday_end">End:</label>
                  <?php
                    $service_hours_thursday_end = $this->get_hours_options( isset($this->hours_options['service_hours_thursday_end']) ? $this->hours_options['service_hours_thursday_end'] : NULL);
                    printf(
                      '<select id="service_hours_thursday_end" name="dealer-settings-hours-options[service_hours_thursday_end]" %s>%s</select>',
                      $this->hours_options['service_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_thursday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_thursday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[service_hours_thursday_closed]" type="checkbox" id="service_hours_thursday_closed" value="checked" %s>',
                      $this->hours_options['service_hours_thursday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="service_hours_friday_start">Start:</label>
                  <?php
                    $service_hours_friday_start = $this->get_hours_options( isset($this->hours_options['service_hours_friday_start']) ? $this->hours_options['service_hours_friday_start'] : NULL);
                    printf(
                      '<select id="service_hours_friday_start" name="dealer-settings-hours-options[service_hours_friday_start]" %s>%s</select>',
                      $this->hours_options['service_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_friday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_friday_end">End:</label>
                  <?php
                    $service_hours_friday_end = $this->get_hours_options( isset($this->hours_options['service_hours_friday_end']) ? $this->hours_options['service_hours_friday_end'] : NULL);
                    printf(
                      '<select id="service_hours_friday_end" name="dealer-settings-hours-options[service_hours_friday_end]" %s>%s</select>',
                      $this->hours_options['service_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_friday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_friday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[service_hours_friday_closed]" type="checkbox" id="service_hours_friday_closed" value="checked" %s>',
                      $this->hours_options['service_hours_friday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="service_hours_saturday_start">Start:</label>
                  <?php
                    $service_hours_saturday_start = $this->get_hours_options( isset($this->hours_options['service_hours_saturday_start']) ? $this->hours_options['service_hours_saturday_start'] : NULL);
                    printf(
                      '<select id="service_hours_saturday_start" name="dealer-settings-hours-options[service_hours_saturday_start]" %s>%s</select>',
                      $this->hours_options['service_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_saturday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_saturday_end">End:</label>
                  <?php
                    $service_hours_saturday_end = $this->get_hours_options( isset($this->hours_options['service_hours_saturday_end']) ? $this->hours_options['service_hours_saturday_end'] : NULL);
                    printf(
                      '<select id="service_hours_saturday_end" name="dealer-settings-hours-options[service_hours_saturday_end]" %s>%s</select>',
                      $this->hours_options['service_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_saturday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_saturday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[service_hours_saturday_closed]" type="checkbox" id="service_hours_saturday_closed" value="checked" %s>',
                      $this->hours_options['service_hours_saturday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="service_hours_sunday_start">Start:</label>
                  <?php
                    $service_hours_sunday_start = $this->get_hours_options( isset($this->hours_options['service_hours_sunday_start']) ? $this->hours_options['service_hours_sunday_start'] : NULL);
                    printf(
                      '<select id="service_hours_sunday_start" name="dealer-settings-hours-options[service_hours_sunday_start]" %s>%s</select>',
                      $this->hours_options['service_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_sunday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_sunday_end">End:</label>
                  <?php
                    $service_hours_sunday_end = $this->get_hours_options( isset($this->hours_options['service_hours_sunday_end']) ? $this->hours_options['service_hours_sunday_end'] : NULL);
                    printf(
                      '<select id="service_hours_sunday_end" name="dealer-settings-hours-options[service_hours_sunday_end]" %s>%s</select>',
                      $this->hours_options['service_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $service_hours_sunday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="service_hours_sunday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[service_hours_sunday_closed]" type="checkbox" id="service_hours_sunday_closed" value="checked" %s>',
                      $this->hours_options['service_hours_sunday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
              </tr>
            </table>
          <?php
  }
  public function parts_hours_callback()
  {
    if (!isset($this->hours_options['parthourstatus'])) {
      $this->hours_options['parthourstatus'] = "Disabled";
    }

    echo 'Status: <select id="parthourstatus" name="dealer-settings-hours-options[parthourstatus]">';
    if (strtolower($this->hours_options['parthourstatus']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->hours_options['parthourstatus']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select><br/><br/>';

    ?>
            <table class="tg">
              <tr>
                <th class="tg-baqh">Monday<br></th>
                <th class="tg-baqh">Tuesday</th>
                <th class="tg-baqh">Wednesday</th>
                <th class="tg-baqh">Thursday</th>
                <th class="tg-baqh">Friday</th>
                <th class="tg-baqh">Saturday</th>
                <th class="tg-baqh">Sunday</th>
              </tr>
              <tr>
                <td class="tg-0lax">
                  <label for="parts_hours_monday_start">Start:</label>
                  <?php
                    $parts_hours_monday_start = $this->get_hours_options( isset($this->hours_options['parts_hours_monday_start']) ? $this->hours_options['parts_hours_monday_start'] : NULL);
                    printf(
                      '<select id="parts_hours_monday_start" name="dealer-settings-hours-options[parts_hours_monday_start]" %s>%s</select>',
                      $this->hours_options['parts_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_monday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_monday_end">End:</label>
                  <?php
                    $parts_hours_monday_end = $this->get_hours_options( isset($this->hours_options['parts_hours_monday_end']) ? $this->hours_options['parts_hours_monday_end'] : NULL);
                    printf(
                      '<select id="parts_hours_monday_end" name="dealer-settings-hours-options[parts_hours_monday_end]" %s>%s</select>',
                      $this->hours_options['parts_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_monday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_monday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[parts_hours_monday_closed]" type="checkbox" id="parts_hours_monday_closed" value="checked" %s>',
                      $this->hours_options['parts_hours_monday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="parts_hours_tuesday_start">Start:</label>
                  <?php
                    $parts_hours_tuesday_start = $this->get_hours_options( isset($this->hours_options['parts_hours_tuesday_start']) ? $this->hours_options['parts_hours_tuesday_start'] : NULL);
                    printf(
                      '<select id="parts_hours_tuesday_start" name="dealer-settings-hours-options[parts_hours_tuesday_start]" %s>%s</select>',
                      $this->hours_options['parts_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_tuesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_tuesday_end">End:</label>
                  <?php
                    $parts_hours_tuesday_end = $this->get_hours_options( isset($this->hours_options['parts_hours_tuesday_end']) ? $this->hours_options['parts_hours_tuesday_end'] : NULL);
                    printf(
                      '<select id="parts_hours_tuesday_end" name="dealer-settings-hours-options[parts_hours_tuesday_end]" %s>%s</select>',
                      $this->hours_options['parts_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_tuesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_tuesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[parts_hours_tuesday_closed]" type="checkbox" id="parts_hours_tuesday_closed" value="checked" %s>',
                      $this->hours_options['parts_hours_tuesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="parts_hours_wednesday_start">Start:</label>
                  <?php
                    $parts_hours_wednesday_start = $this->get_hours_options( isset($this->hours_options['parts_hours_wednesday_start']) ? $this->hours_options['parts_hours_wednesday_start'] : NULL);
                    printf(
                      '<select id="parts_hours_wednesday_start" name="dealer-settings-hours-options[parts_hours_wednesday_start]" %s>%s</select>',
                      $this->hours_options['parts_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_wednesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_wednesday_end">End:</label>
                  <?php
                    $parts_hours_wednesday_end = $this->get_hours_options( isset($this->hours_options['parts_hours_wednesday_end']) ? $this->hours_options['parts_hours_wednesday_end'] : NULL);
                    printf(
                      '<select id="parts_hours_wednesday_end" name="dealer-settings-hours-options[parts_hours_wednesday_end]" %s>%s</select>',
                      $this->hours_options['parts_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_wednesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_wednesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[parts_hours_wednesday_closed]" type="checkbox" id="parts_hours_wednesday_closed" value="checked" %s>',
                      $this->hours_options['parts_hours_wednesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="parts_hours_thursday_start">Start:</label>
                  <?php
                    $parts_hours_thursday_start = $this->get_hours_options( isset($this->hours_options['parts_hours_thursday_start']) ? $this->hours_options['parts_hours_thursday_start'] : NULL);
                    printf(
                      '<select id="parts_hours_thursday_start" name="dealer-settings-hours-options[parts_hours_thursday_start]" %s>%s</select>',
                      $this->hours_options['parts_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_thursday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_thursday_end">End:</label>
                  <?php
                    $parts_hours_thursday_end = $this->get_hours_options( isset($this->hours_options['parts_hours_thursday_end']) ? $this->hours_options['parts_hours_thursday_end'] : NULL);
                    printf(
                      '<select id="parts_hours_thursday_end" name="dealer-settings-hours-options[parts_hours_thursday_end]" %s>%s</select>',
                      $this->hours_options['parts_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_thursday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_thursday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[parts_hours_thursday_closed]" type="checkbox" id="parts_hours_thursday_closed" value="checked" %s>',
                      $this->hours_options['parts_hours_thursday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="parts_hours_friday_start">Start:</label>
                  <?php
                    $parts_hours_friday_start = $this->get_hours_options( isset($this->hours_options['parts_hours_friday_start']) ? $this->hours_options['parts_hours_friday_start'] : NULL);
                    printf(
                      '<select id="parts_hours_friday_start" name="dealer-settings-hours-options[parts_hours_friday_start]" %s>%s</select>',
                      $this->hours_options['parts_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_friday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_friday_end">End:</label>
                  <?php
                    $parts_hours_friday_end = $this->get_hours_options( isset($this->hours_options['parts_hours_friday_end']) ? $this->hours_options['parts_hours_friday_end'] : NULL);
                    printf(
                      '<select id="parts_hours_friday_end" name="dealer-settings-hours-options[parts_hours_friday_end]" %s>%s</select>',
                      $this->hours_options['parts_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_friday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_friday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[parts_hours_friday_closed]" type="checkbox" id="parts_hours_friday_closed" value="checked" %s>',
                      $this->hours_options['parts_hours_friday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="parts_hours_saturday_start">Start:</label>
                  <?php
                    $parts_hours_saturday_start = $this->get_hours_options( isset($this->hours_options['parts_hours_saturday_start']) ? $this->hours_options['parts_hours_saturday_start'] : NULL);
                    printf(
                      '<select id="parts_hours_saturday_start" name="dealer-settings-hours-options[parts_hours_saturday_start]" %s>%s</select>',
                      $this->hours_options['parts_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_saturday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_saturday_end">End:</label>
                  <?php
                    $parts_hours_saturday_end = $this->get_hours_options( isset($this->hours_options['parts_hours_saturday_end']) ? $this->hours_options['parts_hours_saturday_end'] : NULL);
                    printf(
                      '<select id="parts_hours_saturday_end" name="dealer-settings-hours-options[parts_hours_saturday_end]" %s>%s</select>',
                      $this->hours_options['parts_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_saturday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_saturday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[parts_hours_saturday_closed]" type="checkbox" id="parts_hours_saturday_closed" value="checked" %s>',
                      $this->hours_options['parts_hours_saturday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="parts_hours_sunday_start">Start:</label>
                  <?php
                    $parts_hours_sunday_start = $this->get_hours_options( isset($this->hours_options['parts_hours_sunday_start']) ? $this->hours_options['parts_hours_sunday_start'] : NULL);
                    printf(
                      '<select id="parts_hours_sunday_start" name="dealer-settings-hours-options[parts_hours_sunday_start]" %s>%s</select>',
                      $this->hours_options['parts_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_sunday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_sunday_end">End:</label>
                  <?php
                    $parts_hours_sunday_end = $this->get_hours_options( isset($this->hours_options['parts_hours_sunday_end']) ? $this->hours_options['parts_hours_sunday_end'] : NULL);
                    printf(
                      '<select id="parts_hours_sunday_end" name="dealer-settings-hours-options[parts_hours_sunday_end]" %s>%s</select>',
                      $this->hours_options['parts_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $parts_hours_sunday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="parts_hours_sunday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[parts_hours_sunday_closed]" type="checkbox" id="parts_hours_sunday_closed" value="checked" %s>',
                      $this->hours_options['parts_hours_sunday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
              </tr>
            </table>
          <?php
  }

  public function additionalone_hours_callback()
  {
    if (!isset($this->hours_options['additionalone'])) {
      $this->hours_options['additionalone'] = "Disabled";
    }

    echo 'Status: <select id="additionalone" name="dealer-settings-hours-options[additionalone]">';
    if (strtolower($this->hours_options['additionalone']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->hours_options['additionalone']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select><br/><br/>';

    printf(
      'Label name: <input type="text" id="additionalonelabel" name="dealer-settings-hours-options[additionalonelabel]" value="%s" />',
      isset($this->hours_options['additionalonelabel']) ? esc_attr($this->hours_options['additionalonelabel']) : ''
    );

    echo '<br/><br/>';

    printf(
      'Label name FR: <input type="text" id="additionalonelabelfr" name="dealer-settings-hours-options[additionalonelabelfr]" value="%s" />',
      isset($this->hours_options['additionalonelabelfr']) ? esc_attr($this->hours_options['additionalonelabelfr']) : ''
    );

    echo '<br/><br/>';

    ?>
            <table class="tg">
              <tr>
                <th class="tg-baqh">Monday<br></th>
                <th class="tg-baqh">Tuesday</th>
                <th class="tg-baqh">Wednesday</th>
                <th class="tg-baqh">Thursday</th>
                <th class="tg-baqh">Friday</th>
                <th class="tg-baqh">Saturday</th>
                <th class="tg-baqh">Sunday</th>
              </tr>
              <tr>
                <td class="tg-0lax">
                  <label for="additionalone_hours_monday_start">Start:</label>
                  <?php
                    $additionalone_hours_monday_start = $this->get_hours_options( isset($this->hours_options['additionalone_hours_monday_start']) ? $this->hours_options['additionalone_hours_monday_start'] : NULL);
                    printf(
                      '<select id="additionalone_hours_monday_start" name="dealer-settings-hours-options[additionalone_hours_monday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_monday_closed'])) && $this->hours_options['additionalone_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_monday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_monday_end">End:</label>
                  <?php
                    $additionalone_hours_monday_end = $this->get_hours_options( isset($this->hours_options['additionalone_hours_monday_end']) ? $this->hours_options['additionalone_hours_monday_end'] : NULL);
                    printf(
                      '<select id="additionalone_hours_monday_end" name="dealer-settings-hours-options[additionalone_hours_monday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_monday_closed'])) && $this->hours_options['additionalone_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_monday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_monday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalone_hours_monday_closed]" type="checkbox" id="additionalone_hours_monday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionalone_hours_monday_closed'])) && $this->hours_options['additionalone_hours_monday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalone_hours_tuesday_start">Start:</label>
                  <?php
                    $additionalone_hours_tuesday_start = $this->get_hours_options( isset($this->hours_options['additionalone_hours_tuesday_start']) ? $this->hours_options['additionalone_hours_tuesday_start'] : NULL);
                    printf(
                      '<select id="additionalone_hours_tuesday_start" name="dealer-settings-hours-options[additionalone_hours_tuesday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_tuesday_closed'])) && $this->hours_options['additionalone_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_tuesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_tuesday_end">End:</label>
                  <?php
                    $additionalone_hours_tuesday_end = $this->get_hours_options( isset($this->hours_options['additionalone_hours_tuesday_end']) ? $this->hours_options['additionalone_hours_tuesday_end'] : NULL);
                    printf(
                      '<select id="additionalone_hours_tuesday_end" name="dealer-settings-hours-options[additionalone_hours_tuesday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_tuesday_closed'])) && $this->hours_options['additionalone_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_tuesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_tuesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalone_hours_tuesday_closed]" type="checkbox" id="additionalone_hours_tuesday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionalone_hours_tuesday_closed'])) && $this->hours_options['additionalone_hours_tuesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalone_hours_wednesday_start">Start:</label>
                  <?php
                    $additionalone_hours_wednesday_start = $this->get_hours_options( isset($this->hours_options['additionalone_hours_wednesday_start']) ? $this->hours_options['additionalone_hours_wednesday_start'] : NULL);
                    printf(
                      '<select id="additionalone_hours_wednesday_start" name="dealer-settings-hours-options[additionalone_hours_wednesday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_wednesday_closed'])) && $this->hours_options['additionalone_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_wednesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_wednesday_end">End:</label>
                  <?php
                    $additionalone_hours_wednesday_end = $this->get_hours_options( isset($this->hours_options['additionalone_hours_wednesday_end']) ? $this->hours_options['additionalone_hours_wednesday_end'] : NULL);
                    printf(
                      '<select id="additionalone_hours_wednesday_end" name="dealer-settings-hours-options[additionalone_hours_wednesday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_wednesday_closed'])) && $this->hours_options['additionalone_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_wednesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_wednesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalone_hours_wednesday_closed]" type="checkbox" id="additionalone_hours_wednesday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionalone_hours_wednesday_closed'])) && $this->hours_options['additionalone_hours_wednesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalone_hours_thursday_start">Start:</label>
                  <?php
                    $additionalone_hours_thursday_start = $this->get_hours_options( isset($this->hours_options['additionalone_hours_thursday_start']) ? $this->hours_options['additionalone_hours_thursday_start'] : NULL);
                    printf(
                      '<select id="additionalone_hours_thursday_start" name="dealer-settings-hours-options[additionalone_hours_thursday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_thursday_closed'])) && $this->hours_options['additionalone_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_thursday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_thursday_end">End:</label>
                  <?php
                    $additionalone_hours_thursday_end = $this->get_hours_options( isset($this->hours_options['additionalone_hours_thursday_end']) ? $this->hours_options['additionalone_hours_thursday_end'] : NULL);
                    printf(
                      '<select id="additionalone_hours_thursday_end" name="dealer-settings-hours-options[additionalone_hours_thursday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_thursday_closed'])) && $this->hours_options['additionalone_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_thursday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_thursday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalone_hours_thursday_closed]" type="checkbox" id="additionalone_hours_thursday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionalone_hours_thursday_closed'])) && $this->hours_options['additionalone_hours_thursday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalone_hours_friday_start">Start:</label>
                  <?php
                    $additionalone_hours_friday_start = $this->get_hours_options( isset($this->hours_options['additionalone_hours_friday_start']) ? $this->hours_options['additionalone_hours_friday_start'] : NULL);
                    printf(
                      '<select id="additionalone_hours_friday_start" name="dealer-settings-hours-options[additionalone_hours_friday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_friday_closed'])) && $this->hours_options['additionalone_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_friday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_friday_end">End:</label>
                  <?php
                    $additionalone_hours_friday_end = $this->get_hours_options( isset($this->hours_options['additionalone_hours_friday_end']) ? $this->hours_options['additionalone_hours_friday_end'] : NULL);
                    printf(
                      '<select id="additionalone_hours_friday_end" name="dealer-settings-hours-options[additionalone_hours_friday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_friday_closed'])) && $this->hours_options['additionalone_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_friday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_friday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalone_hours_friday_closed]" type="checkbox" id="additionalone_hours_friday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionalone_hours_friday_closed'])) && $this->hours_options['additionalone_hours_friday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalone_hours_saturday_start">Start:</label>
                  <?php
                    $additionalone_hours_saturday_start = $this->get_hours_options( isset($this->hours_options['additionalone_hours_saturday_start']) ? $this->hours_options['additionalone_hours_saturday_start'] : NULL);
                    printf(
                      '<select id="additionalone_hours_saturday_start" name="dealer-settings-hours-options[additionalone_hours_saturday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_saturday_closed'])) && $this->hours_options['additionalone_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_saturday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_saturday_end">End:</label>
                  <?php
                    $additionalone_hours_saturday_end = $this->get_hours_options( isset($this->hours_options['additionalone_hours_saturday_end']) ? $this->hours_options['additionalone_hours_saturday_end'] : NULL);
                    printf(
                      '<select id="additionalone_hours_saturday_end" name="dealer-settings-hours-options[additionalone_hours_saturday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_saturday_closed'])) && $this->hours_options['additionalone_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_saturday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_saturday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalone_hours_saturday_closed]" type="checkbox" id="additionalone_hours_saturday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionalone_hours_saturday_closed'])) && $this->hours_options['additionalone_hours_saturday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalone_hours_sunday_start">Start:</label>
                  <?php
                    $additionalone_hours_sunday_start = $this->get_hours_options( isset($this->hours_options['additionalone_hours_sunday_start']) ? $this->hours_options['additionalone_hours_sunday_start'] : NULL);
                    printf(
                      '<select id="additionalone_hours_sunday_start" name="dealer-settings-hours-options[additionalone_hours_sunday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_sunday_closed'])) && $this->hours_options['additionalone_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_sunday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_sunday_end">End:</label>
                  <?php
                    $additionalone_hours_sunday_end = $this->get_hours_options( isset($this->hours_options['additionalone_hours_sunday_end']) ? $this->hours_options['additionalone_hours_sunday_end'] : NULL);
                    printf(
                      '<select id="additionalone_hours_sunday_end" name="dealer-settings-hours-options[additionalone_hours_sunday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_sunday_closed'])) && $this->hours_options['additionalone_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalone_hours_sunday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalone_hours_sunday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalone_hours_sunday_closed]" type="checkbox" id="additionalone_hours_sunday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionalone_hours_sunday_closed'])) && $this->hours_options['additionalone_hours_sunday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
              </tr>
            </table>
          <?php
  }

  public function additionaltwo_hours_callback()
  {

    //var_dump($this->hours_options);
    if (!isset($this->hours_options['additionaltwo'])) {
      $this->hours_options['additionaltwo'] = "Disabled";
    }

    echo 'Status: <select id="additionaltwo" name="dealer-settings-hours-options[additionaltwo]">';
    if (strtolower($this->hours_options['additionaltwo']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->hours_options['additionaltwo']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select><br/><br/>';

    printf(
      'Label name: <input type="text" id="additionaltwolabel" name="dealer-settings-hours-options[additionaltwolabel]" value="%s" />',
      isset($this->hours_options['additionaltwolabel']) ? esc_attr($this->hours_options['additionaltwolabel']) : ''
    );

    echo '<br/><br/>';

    printf(
      'Label name FR: <input type="text" id="additionaltwolabelfr" name="dealer-settings-hours-options[additionaltwolabelfr]" value="%s" />',
      isset($this->hours_options['additionaltwolabelfr']) ? esc_attr($this->hours_options['additionaltwolabelfr']) : ''
    );

    echo '<br/><br/>';
    ?>
            <table class="tg">
              <tr>
                <th class="tg-baqh">Monday<br></th>
                <th class="tg-baqh">Tuesday</th>
                <th class="tg-baqh">Wednesday</th>
                <th class="tg-baqh">Thursday</th>
                <th class="tg-baqh">Friday</th>
                <th class="tg-baqh">Saturday</th>
                <th class="tg-baqh">Sunday</th>
              </tr>
              <tr>
                <td class="tg-0lax">
                  <label for="additionaltwo_hours_monday_start">Start:</label>
                  <?php
                    $additionaltwo_hours_monday_start = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_monday_start']) ? $this->hours_options['additionaltwo_hours_monday_start'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_monday_start" name="dealer-settings-hours-options[additionaltwo_hours_monday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_monday_closed'])) && $this->hours_options['additionaltwo_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_monday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_monday_end">End:</label>
                  <?php
                    $additionaltwo_hours_monday_end = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_monday_end']) ? $this->hours_options['additionaltwo_hours_monday_end'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_monday_end" name="dealer-settings-hours-options[additionaltwo_hours_monday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_monday_closed'])) && $this->hours_options['additionaltwo_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_monday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_monday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionaltwo_hours_monday_closed]" type="checkbox" id="additionaltwo_hours_monday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionaltwo_hours_monday_closed'])) && $this->hours_options['additionaltwo_hours_monday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionaltwo_hours_tuesday_start">Start:</label>
                  <?php
                    $additionaltwo_hours_tuesday_start = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_tuesday_start']) ? $this->hours_options['additionaltwo_hours_tuesday_start'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_tuesday_start" name="dealer-settings-hours-options[additionaltwo_hours_tuesday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_tuesday_closed'])) && $this->hours_options['additionaltwo_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_tuesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_tuesday_end">End:</label>
                  <?php
                    $additionaltwo_hours_tuesday_end = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_tuesday_end']) ? $this->hours_options['additionaltwo_hours_tuesday_end'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_tuesday_end" name="dealer-settings-hours-options[additionaltwo_hours_tuesday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_tuesday_closed'])) && $this->hours_options['additionaltwo_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_tuesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_tuesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionaltwo_hours_tuesday_closed]" type="checkbox" id="additionaltwo_hours_tuesday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionaltwo_hours_tuesday_closed'])) && $this->hours_options['additionaltwo_hours_tuesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionaltwo_hours_wednesday_start">Start:</label>
                  <?php
                    $additionaltwo_hours_wednesday_start = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_wednesday_start']) ? $this->hours_options['additionaltwo_hours_wednesday_start'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_wednesday_start" name="dealer-settings-hours-options[additionaltwo_hours_wednesday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_wednesday_closed'])) && $this->hours_options['additionaltwo_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_wednesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_wednesday_end">End:</label>
                  <?php
                    $additionaltwo_hours_wednesday_end = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_wednesday_end']) ? $this->hours_options['additionaltwo_hours_wednesday_end'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_wednesday_end" name="dealer-settings-hours-options[additionaltwo_hours_wednesday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_wednesday_closed'])) && $this->hours_options['additionaltwo_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_wednesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_wednesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionaltwo_hours_wednesday_closed]" type="checkbox" id="additionaltwo_hours_wednesday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionaltwo_hours_wednesday_closed'])) && $this->hours_options['additionaltwo_hours_wednesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionaltwo_hours_thursday_start">Start:</label>
                  <?php
                    $additionaltwo_hours_thursday_start = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_thursday_start']) ? $this->hours_options['additionaltwo_hours_thursday_start'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_thursday_start" name="dealer-settings-hours-options[additionaltwo_hours_thursday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_thursday_closed'])) && $this->hours_options['additionaltwo_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_thursday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_thursday_end">End:</label>
                  <?php
                    $additionaltwo_hours_thursday_end = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_thursday_end']) ? $this->hours_options['additionaltwo_hours_thursday_end'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_thursday_end" name="dealer-settings-hours-options[additionaltwo_hours_thursday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_thursday_closed'])) && $this->hours_options['additionaltwo_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_thursday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_thursday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionaltwo_hours_thursday_closed]" type="checkbox" id="additionaltwo_hours_thursday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionaltwo_hours_thursday_closed'])) && $this->hours_options['additionaltwo_hours_thursday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionaltwo_hours_friday_start">Start:</label>
                  <?php
                    $additionaltwo_hours_friday_start = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_friday_start']) ? $this->hours_options['additionaltwo_hours_friday_start'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_friday_start" name="dealer-settings-hours-options[additionaltwo_hours_friday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_friday_closed'])) && $this->hours_options['additionaltwo_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_friday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_friday_end">End:</label>
                  <?php
                    $additionaltwo_hours_friday_end = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_friday_end']) ? $this->hours_options['additionaltwo_hours_friday_end'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_friday_end" name="dealer-settings-hours-options[additionaltwo_hours_friday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_friday_closed'])) && $this->hours_options['additionaltwo_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_friday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_friday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionaltwo_hours_friday_closed]" type="checkbox" id="additionaltwo_hours_friday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionaltwo_hours_friday_closed'])) && $this->hours_options['additionaltwo_hours_friday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionaltwo_hours_saturday_start">Start:</label>
                  <?php
                    $additionaltwo_hours_saturday_start = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_saturday_start']) ? $this->hours_options['additionaltwo_hours_saturday_start'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_saturday_start" name="dealer-settings-hours-options[additionaltwo_hours_saturday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_saturday_closed'])) && $this->hours_options['additionaltwo_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_saturday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_saturday_end">End:</label>
                  <?php
                    $additionaltwo_hours_saturday_end = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_saturday_end']) ? $this->hours_options['additionaltwo_hours_saturday_end'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_saturday_end" name="dealer-settings-hours-options[additionaltwo_hours_saturday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionaltwo_hours_saturday_closed'])) && $this->hours_options['additionaltwo_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_saturday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_saturday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionaltwo_hours_saturday_closed]" type="checkbox" id="additionaltwo_hours_saturday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionaltwo_hours_saturday_closed'])) && $this->hours_options['additionaltwo_hours_saturday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionaltwo_hours_sunday_start">Start:</label>
                  <?php
                    $additionaltwo_hours_sunday_start = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_sunday_start']) ? $this->hours_options['additionaltwo_hours_sunday_start'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_sunday_start" name="dealer-settings-hours-options[additionaltwo_hours_sunday_start]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_sunday_closed'])) && $this->hours_options['additionaltwo_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_sunday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_sunday_end">End:</label>
                  <?php
                    $additionaltwo_hours_sunday_end = $this->get_hours_options( isset($this->hours_options['additionaltwo_hours_sunday_end']) ? $this->hours_options['additionaltwo_hours_sunday_end'] : NULL);
                    printf(
                      '<select id="additionaltwo_hours_sunday_end" name="dealer-settings-hours-options[additionaltwo_hours_sunday_end]" %s>%s</select>',
                      (isset($this->hours_options['additionalone_hours_sunday_closed'])) && $this->hours_options['additionaltwo_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $additionaltwo_hours_sunday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionaltwo_hours_sunday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionaltwo_hours_sunday_closed]" type="checkbox" id="additionaltwo_hours_sunday_closed" value="checked" %s>',
                      (isset($this->hours_options['additionalone_hours_sunday_closed'])) && $this->hours_options['additionaltwo_hours_sunday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
              </tr>
            </table>
          <?php
  }

  //Additional3 Hours
  public function additionalthree_hours_callback()
  {
    if (!isset($this->hours_options['additionalthree'])) {
      $this->hours_options['additionalthree'] = "Disabled";
    }

    echo 'Status: <select id="additionalthree" name="dealer-settings-hours-options[additionalthree]">';
    if (strtolower($this->hours_options['additionalthree']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->hours_options['additionalthree']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select><br/><br/>';

    printf(
      'Label name: <input type="text" id="additionalthreelabel" name="dealer-settings-hours-options[additionalthreelabel]" value="%s" />',
      isset($this->hours_options['additionalthreelabel']) ? esc_attr($this->hours_options['additionalthreelabel']) : ''
    );

    echo '<br/><br/>';

    printf(
      'Label name FR: <input type="text" id="additionalthreelabelfr" name="dealer-settings-hours-options[additionalthreelabelfr]" value="%s" />',
      isset($this->hours_options['additionalthreelabelfr']) ? esc_attr($this->hours_options['additionalthreelabelfr']) : ''
    );

    echo '<br/><br/>';
    ?>
            <table class="tg">
              <tr>
                <th class="tg-baqh">Monday<br></th>
                <th class="tg-baqh">Tuesday</th>
                <th class="tg-baqh">Wednesday</th>
                <th class="tg-baqh">Thursday</th>
                <th class="tg-baqh">Friday</th>
                <th class="tg-baqh">Saturday</th>
                <th class="tg-baqh">Sunday</th>
              </tr>
              <tr>
                <td class="tg-0lax">
                  <label for="additionalthree_hours_monday_start">Start:</label>
                  <?php
                    $additionalthree_hours_monday_start = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_monday_start']) ? $this->hours_options['additionalthree_hours_monday_start'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_monday_start" name="dealer-settings-hours-options[additionalthree_hours_monday_start]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_monday_closed']) && $this->hours_options['additionalthree_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_monday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_monday_end">End:</label>
                  <?php
                    $additionalthree_hours_monday_end = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_monday_end']) ? $this->hours_options['additionalthree_hours_monday_end'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_monday_end" name="dealer-settings-hours-options[additionalthree_hours_monday_end]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_monday_closed']) && $this->hours_options['additionalthree_hours_monday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_monday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_monday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalthree_hours_monday_closed]" type="checkbox" id="additionalthree_hours_monday_closed" value="checked" %s>',
                      isset($this->hours_options['additionalthree_hours_monday_closed']) && $this->hours_options['additionalthree_hours_monday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalthree_hours_tuesday_start">Start:</label>
                  <?php
                    $additionalthree_hours_tuesday_start = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_tuesday_start']) ? $this->hours_options['additionalthree_hours_tuesday_start'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_tuesday_start" name="dealer-settings-hours-options[additionalthree_hours_tuesday_start]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_tuesday_closed']) && $this->hours_options['additionalthree_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_tuesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_tuesday_end">End:</label>
                  <?php
                    $additionalthree_hours_tuesday_end = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_tuesday_end']) ? $this->hours_options['additionalthree_hours_tuesday_end'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_tuesday_end" name="dealer-settings-hours-options[additionalthree_hours_tuesday_end]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_tuesday_closed']) && $this->hours_options['additionalthree_hours_tuesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_tuesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_tuesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalthree_hours_tuesday_closed]" type="checkbox" id="additionalthree_hours_tuesday_closed" value="checked" %s>',
                      isset($this->hours_options['additionalthree_hours_tuesday_closed']) && $this->hours_options['additionalthree_hours_tuesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalthree_hours_wednesday_start">Start:</label>
                  <?php
                    $additionalthree_hours_wednesday_start = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_wednesday_start']) ? $this->hours_options['additionalthree_hours_wednesday_start'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_wednesday_start" name="dealer-settings-hours-options[additionalthree_hours_wednesday_start]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_wednesday_closed']) && $this->hours_options['additionalthree_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_wednesday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_wednesday_end">End:</label>
                  <?php
                    $additionalthree_hours_wednesday_end = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_wednesday_end']) ? $this->hours_options['additionalthree_hours_wednesday_end'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_wednesday_end" name="dealer-settings-hours-options[additionalthree_hours_wednesday_end]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_wednesday_closed']) && $this->hours_options['additionalthree_hours_wednesday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_wednesday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_wednesday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalthree_hours_wednesday_closed]" type="checkbox" id="additionalthree_hours_wednesday_closed" value="checked" %s>',
                      isset($this->hours_options['additionalthree_hours_wednesday_closed']) && $this->hours_options['additionalthree_hours_wednesday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalthree_hours_thursday_start">Start:</label>
                  <?php
                    $additionalthree_hours_thursday_start = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_thursday_start']) ? $this->hours_options['additionalthree_hours_thursday_start'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_thursday_start" name="dealer-settings-hours-options[additionalthree_hours_thursday_start]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_thursday_closed']) && $this->hours_options['additionalthree_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_thursday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_thursday_end">End:</label>
                  <?php
                    $additionalthree_hours_thursday_end = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_thursday_end']) ? $this->hours_options['additionalthree_hours_thursday_end'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_thursday_end" name="dealer-settings-hours-options[additionalthree_hours_thursday_end]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_thursday_closed']) && $this->hours_options['additionalthree_hours_thursday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_thursday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_thursday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalthree_hours_thursday_closed]" type="checkbox" id="additionalthree_hours_thursday_closed" value="checked" %s>',
                      isset($this->hours_options['additionalthree_hours_thursday_closed']) && $this->hours_options['additionalthree_hours_thursday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalthree_hours_friday_start">Start:</label>
                  <?php
                    $additionalthree_hours_friday_start = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_friday_start']) ? $this->hours_options['additionalthree_hours_friday_start'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_friday_start" name="dealer-settings-hours-options[additionalthree_hours_friday_start]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_friday_closed']) && $this->hours_options['additionalthree_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_friday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_friday_end">End:</label>
                  <?php
                    $additionalthree_hours_friday_end = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_friday_end']) ? $this->hours_options['additionalthree_hours_friday_end'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_friday_end" name="dealer-settings-hours-options[additionalthree_hours_friday_end]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_friday_closed']) && $this->hours_options['additionalthree_hours_friday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_friday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_friday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalthree_hours_friday_closed]" type="checkbox" id="additionalthree_hours_friday_closed" value="checked" %s>',
                      isset($this->hours_options['additionalthree_hours_friday_closed']) && $this->hours_options['additionalthree_hours_friday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalthree_hours_saturday_start">Start:</label>
                  <?php
                    $additionalthree_hours_saturday_start = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_saturday_start']) ? $this->hours_options['additionalthree_hours_saturday_start'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_saturday_start" name="dealer-settings-hours-options[additionalthree_hours_saturday_start]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_saturday_closed']) && $this->hours_options['additionalthree_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_saturday_start
                    );
                   ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_saturday_end">End:</label>
                  <?php
                    $additionalthree_hours_saturday_end = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_saturday_end']) ? $this->hours_options['additionalthree_hours_saturday_end'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_saturday_end" name="dealer-settings-hours-options[additionalthree_hours_saturday_end]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_saturday_closed']) && $this->hours_options['additionalthree_hours_saturday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_saturday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_saturday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalthree_hours_saturday_closed]" type="checkbox" id="additionalthree_hours_saturday_closed" value="checked" %s>',
                      isset($this->hours_options['additionalthree_hours_saturday_closed']) && $this->hours_options['additionalthree_hours_saturday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
                <td class="tg-0lax">
                  <label for="additionalthree_hours_sunday_start">Start:</label>
                  <?php
                    $additionalthree_hours_sunday_start = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_sunday_start']) ? $this->hours_options['additionalthree_hours_sunday_start'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_sunday_start" name="dealer-settings-hours-options[additionalthree_hours_sunday_start]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_sunday_closed']) && $this->hours_options['additionalthree_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_sunday_start
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_sunday_end">End:</label>
                  <?php
                    $additionalthree_hours_sunday_end = $this->get_hours_options( isset($this->hours_options['additionalthree_hours_sunday_end']) ? $this->hours_options['additionalthree_hours_sunday_end'] : NULL);
                    printf(
                      '<select id="additionalthree_hours_sunday_end" name="dealer-settings-hours-options[additionalthree_hours_sunday_end]" %s>%s</select>',
                      isset($this->hours_options['additionalthree_hours_sunday_closed']) && $this->hours_options['additionalthree_hours_sunday_closed'] == 'checked' ? 'disabled' : '',
                      $additionalthree_hours_sunday_end
                    );
                  ?>
                  <br>
                  <hr>
                  <label for="additionalthree_hours_sunday_closed">
                    <?php printf(
                      '<input name="dealer-settings-hours-options[additionalthree_hours_sunday_closed]" type="checkbox" id="additionalthree_hours_sunday_closed" value="checked" %s>',
                      isset($this->hours_options['additionalthree_hours_sunday_closed']) && $this->hours_options['additionalthree_hours_sunday_closed'] == 'checked' ? 'checked' : ''
                    ); ?> Closed
                  </label>
                </td>
              </tr>
            </table>
            <br><br>
            <h3>✨ Special Hours</h3>
            <div id="special-hours-form" style="background: #f9f9f9; padding: 20px; border-radius: 5px; margin-bottom: 20px;">
              <h4 id="form-title">Add New Special Hours</h4>
              <input type="hidden" id="editing_index" value="">
              <table class="tg" style="width: 100%;">
                <tr>
                  <th class="tg-baqh">Label</th>
                  <th class="tg-baqh">Date</th>
                  <th class="tg-baqh">Sales</th>
                  <th class="tg-baqh">Service</th>
                  <th class="tg-baqh">Parts</th>
                  <th class="tg-baqh">Action</th>
                </tr>
                <tr>
                  <td class="tg-0lax">
                    <input type="text" id="special_hours_label" placeholder="e.g., Holiday Hours" style="width: 100%; padding: 5px;">
                  </td>
                  <td class="tg-0lax">
                    <input type="date" id="special_hours_date" style="width: 100%; padding: 5px;">
                  </td>
                  <td class="tg-0lax">
                    <label>
                      <input type="checkbox" id="special_hours_sales_closed" style="margin-right: 5px;">
                      Closed
                    </label>
                    <hr>
                    <div id="special_hours_sales_container">
                      <label for="special_hours_sales_start">Start:</label>
                      <?php
                        $sales_start_options = $this->get_hours_options(NULL);
                        printf('<select id="special_hours_sales_start" style="width: 100%%;">%s</select>', $sales_start_options);
                      ?>
                      <br><hr>
                      <label for="special_hours_sales_end">End:</label>
                      <?php
                        $sales_end_options = $this->get_hours_options(NULL);
                        printf('<select id="special_hours_sales_end" style="width: 100%%;">%s</select>', $sales_end_options);
                      ?>
                    </div>
                  </td>
                  <td class="tg-0lax">
                    <label>
                      <input type="checkbox" id="special_hours_service_closed" style="margin-right: 5px;">
                      Closed
                    </label>
                    <hr>
                    <div id="special_hours_service_container">
                      <label for="special_hours_service_start">Start:</label>
                      <?php
                        $service_start_options = $this->get_hours_options(NULL);
                        printf('<select id="special_hours_service_start" style="width: 100%%;">%s</select>', $service_start_options);
                      ?>
                      <br><hr>
                      <label for="special_hours_service_end">End:</label>
                      <?php
                        $service_end_options = $this->get_hours_options(NULL);
                        printf('<select id="special_hours_service_end" style="width: 100%%;">%s</select>', $service_end_options);
                      ?>
                    </div>
                  </td>
                  <td class="tg-0lax">
                    <label>
                      <input type="checkbox" id="special_hours_parts_closed" style="margin-right: 5px;">
                      Closed
                    </label>
                    <hr>
                    <div id="special_hours_parts_container">
                      <label for="special_hours_parts_start">Start:</label>
                      <?php
                        $parts_start_options = $this->get_hours_options(NULL);
                        printf('<select id="special_hours_parts_start" style="width: 100%%;">%s</select>', $parts_start_options);
                      ?>
                      <br><hr>
                      <label for="special_hours_parts_end">End:</label>
                      <?php
                        $parts_end_options = $this->get_hours_options(NULL);
                        printf('<select id="special_hours_parts_end" style="width: 100%%;">%s</select>', $parts_end_options);
                      ?>
                    </div>
                  </td>
                  <td class="tg-0lax" style="vertical-align: middle; text-align: center;">
                    <button type="button" id="save-special-hours" class="button button-primary" style="padding: 10px 20px; margin-bottom: 5px;">Save</button>
                    <button type="button" id="cancel-edit-special-hours" class="button" style="padding: 10px 20px; display: none;">Cancel</button>
                  </td>
                </tr>
              </table>
            </div>

            <input type="hidden" id="special_hours_data" name="dealer-settings-hours-options[special_hours]" value='<?php echo esc_attr(isset($this->hours_options['special_hours']) ? $this->hours_options['special_hours'] : '[]'); ?>'>

            <div id="special-hours-list">
              <h4>Saved Special Hours</h4>
              <div id="special-hours-items"></div>
            </div>

            <script>
            jQuery(document).ready(function($) {
              let specialHours = [];

              try {
                const savedData = $('#special_hours_data').val();
                if (savedData && savedData !== '[]') {
                  specialHours = JSON.parse(savedData);
                }
              } catch(e) {
                console.error('Error parsing special hours:', e);
                specialHours = [];
              }

              // Handle closed checkboxes
              function updateClosedState(dept) {
                const isChecked = $(`#special_hours_${dept}_closed`).is(':checked');
                $(`#special_hours_${dept}_container`).toggle(!isChecked);
                if (isChecked) {
                  $(`#special_hours_${dept}_start`).prop('disabled', true);
                  $(`#special_hours_${dept}_end`).prop('disabled', true);
                } else {
                  $(`#special_hours_${dept}_start`).prop('disabled', false);
                  $(`#special_hours_${dept}_end`).prop('disabled', false);
                }
              }

              $('#special_hours_sales_closed').on('change', function() { updateClosedState('sales'); });
              $('#special_hours_service_closed').on('change', function() { updateClosedState('service'); });
              $('#special_hours_parts_closed').on('change', function() { updateClosedState('parts'); });

              function clearForm() {
                $('#special_hours_label').val('');
                $('#special_hours_date').val('');
                $('#special_hours_sales_start').prop('selectedIndex', 0);
                $('#special_hours_sales_end').prop('selectedIndex', 0);
                $('#special_hours_service_start').prop('selectedIndex', 0);
                $('#special_hours_service_end').prop('selectedIndex', 0);
                $('#special_hours_parts_start').prop('selectedIndex', 0);
                $('#special_hours_parts_end').prop('selectedIndex', 0);
                $('#special_hours_sales_closed').prop('checked', false);
                $('#special_hours_service_closed').prop('checked', false);
                $('#special_hours_parts_closed').prop('checked', false);
                updateClosedState('sales');
                updateClosedState('service');
                updateClosedState('parts');
                $('#editing_index').val('');
                $('#form-title').text('Add New Special Hours');
                $('#cancel-edit-special-hours').hide();
              }

              function renderSpecialHours() {
                const container = $('#special-hours-items');
                container.empty();

                if (specialHours.length === 0) {
                  container.html('<p style="color: #666; font-style: italic;">No special hours added yet.</p>');
                  return;
                }

                specialHours.forEach((item, index) => {
                  const card = $('<div>', {
                    class: 'special-hours-card',
                    style: 'background: white; border: 1px solid #ddd; border-radius: 5px; padding: 15px; margin-bottom: 10px;'
                  });

                  const salesHours = item.sales_closed ? '<span style="color: #999;">Closed</span>' : `${item.sales_start || 'N/A'} - ${item.sales_end || 'N/A'}`;
                  const serviceHours = item.service_closed ? '<span style="color: #999;">Closed</span>' : `${item.service_start || 'N/A'} - ${item.service_end || 'N/A'}`;
                  const partsHours = item.parts_closed ? '<span style="color: #999;">Closed</span>' : `${item.parts_start || 'N/A'} - ${item.parts_end || 'N/A'}`;

                  card.html(`
                    <div style="display: flex; justify-content: space-between; align-items: start;">
                      <div style="flex: 1;">
                        <h4 style="margin: 0 0 10px 0; color: #2271b1;">${item.label}</h4>
                        <p style="margin: 5px 0;"><strong>Date:</strong> ${item.date || 'N/A'}</p>
                        <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 15px; margin-top: 10px;">
                          <div>
                            <strong>Sales:</strong><br>
                            ${salesHours}
                          </div>
                          <div>
                            <strong>Service:</strong><br>
                            ${serviceHours}
                          </div>
                          <div>
                            <strong>Parts:</strong><br>
                            ${partsHours}
                          </div>
                        </div>
                      </div>
                      <div style="display: flex; flex-direction: column; gap: 5px; margin-left: 15px;">
                        <button type="button" class="button edit-special-hours" data-index="${index}" style="background: #2271b1; color: white; border: none;">Edit</button>
                        <button type="button" class="button delete-special-hours" data-index="${index}" style="background: #dc3232; color: white; border: none;">Delete</button>
                      </div>
                    </div>
                  `);

                  container.append(card);
                });
              }

              $('#save-special-hours').on('click', function() {
                const label = $('#special_hours_label').val().trim();
                const date = $('#special_hours_date').val();
                const editingIndex = $('#editing_index').val();

                const salesClosed = $('#special_hours_sales_closed').is(':checked');
                const serviceClosed = $('#special_hours_service_closed').is(':checked');
                const partsClosed = $('#special_hours_parts_closed').is(':checked');

                if (!label) {
                  alert('Please enter a label for the special hours.');
                  return;
                }

                const specialHoursEntry = {
                  label: label,
                  date: date,
                  sales_closed: salesClosed,
                  sales_start: salesClosed ? '' : $('#special_hours_sales_start').val(),
                  sales_end: salesClosed ? '' : $('#special_hours_sales_end').val(),
                  service_closed: serviceClosed,
                  service_start: serviceClosed ? '' : $('#special_hours_service_start').val(),
                  service_end: serviceClosed ? '' : $('#special_hours_service_end').val(),
                  parts_closed: partsClosed,
                  parts_start: partsClosed ? '' : $('#special_hours_parts_start').val(),
                  parts_end: partsClosed ? '' : $('#special_hours_parts_end').val()
                };

                if (editingIndex !== '') {
                  // Update existing entry
                  specialHours[parseInt(editingIndex)] = specialHoursEntry;
                } else {
                  // Add new entry
                  specialHours.push(specialHoursEntry);
                }

                $('#special_hours_data').val(JSON.stringify(specialHours));
                clearForm();
                renderSpecialHours();
              });

              $(document).on('click', '.edit-special-hours', function() {
                const index = $(this).data('index');
                const item = specialHours[index];

                $('#special_hours_label').val(item.label);
                $('#special_hours_date').val(item.date || '');

                $('#special_hours_sales_closed').prop('checked', item.sales_closed || false);
                $('#special_hours_service_closed').prop('checked', item.service_closed || false);
                $('#special_hours_parts_closed').prop('checked', item.parts_closed || false);

                if (!item.sales_closed) {
                  $('#special_hours_sales_start').val(item.sales_start || '');
                  $('#special_hours_sales_end').val(item.sales_end || '');
                }
                if (!item.service_closed) {
                  $('#special_hours_service_start').val(item.service_start || '');
                  $('#special_hours_service_end').val(item.service_end || '');
                }
                if (!item.parts_closed) {
                  $('#special_hours_parts_start').val(item.parts_start || '');
                  $('#special_hours_parts_end').val(item.parts_end || '');
                }

                updateClosedState('sales');
                updateClosedState('service');
                updateClosedState('parts');

                $('#editing_index').val(index);
                $('#form-title').text('Edit Special Hours');
                $('#cancel-edit-special-hours').show();

                $('html, body').animate({
                  scrollTop: $('#special-hours-form').offset().top - 100
                }, 500);
              });

              $('#cancel-edit-special-hours').on('click', function() {
                clearForm();
              });

              $(document).on('click', '.delete-special-hours', function() {
                const index = $(this).data('index');
                if (confirm('Are you sure you want to delete this special hours entry?')) {
                  specialHours.splice(index, 1);
                  $('#special_hours_data').val(JSON.stringify(specialHours));
                  renderSpecialHours();
                }
              });

              // Initialize
              updateClosedState('sales');
              updateClosedState('service');
              updateClosedState('parts');
              renderSpecialHours();
            });
            </script>

            <style>
            .special-hours-card {
              transition: box-shadow 0.2s;
            }
            .special-hours-card:hover {
              box-shadow: 0 2px 8px rgba(0,0,0,0.1);
            }
            .edit-special-hours:hover {
              background: #135e96 !important;
            }
            .delete-special-hours:hover {
              background: #a00 !important;
            }
            </style>
          <?php
  }
  //Additional3 Hours----END

  public function hours_disclaimer_callback()
  {
    echo 'Status: <select id="hour_disclaimer_status" name="dealer-settings-hours-options[hour_disclaimer_status]">';
    if (strtolower($this->hours_options['hour_disclaimer_status']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->hours_options['hour_disclaimer_status']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select><br/><br/>';

    echo 'Disclaimer:';
    wp_editor(
      isset($this->hours_options['disclaimer']) ? ($this->hours_options['disclaimer']) : '',
      'disclaimer',
      ['textarea_name' => "dealer-settings-hours-options[disclaimer]"]
    );
  }

  public function create_labels_page()
  {
    // Set class property
    $this->labels_options = get_option('dealer-settings-labels-options');
    ?>
            <div class="wrap">
            <style>
							table {
								width: 54% !important;
								max-width: 732px; /* Máximo ancho de 732px */
							}
							/* Ocultar los th vacíos */
							th:empty {
								display: none;
							}

							tr:first-of-type td {
								padding: 0 !important;
							}
							tr:nth-child(n+2) {
								display: inline;
								max-width:50%;
							}

							td {
								flex: 1 1 33%;
								box-sizing: border-box;
								padding: 5px;
							}
							/* Ajustes para diseño en pantalla pequeña */

              @media (max-width: 1340px) {
                tr td div img  {
								display: none;
								}
                table {
                  width: 100% !important;
                }

              }

							@media (max-width: 900px) {
								td {
									flex: 1 1 100%; /* Colocar en una sola columna en pantallas pequeñas */
								}
                tr:first-of-type  {
								display: none;
								}

								table {
									width: 100% !important;
								}
							}
							.language-div {
								display: flex;
								width: 52%;
								justify-content: flex-end;
							}
							.language-title {
								display: inline;
								width: 33%;
								text-align: center;
							}
            </style>

              <h1>Labels</h1>
              <form method="post" action="options.php">
                <?php

                settings_fields('dealer-settings-labels-options-group');
                do_settings_sections('dealer-settings-languages');
                do_settings_sections('dealer-settings-labels');
                do_settings_sections('dealer-settings-tag-labels');
                do_settings_sections('dealer-settings-phones');
                submit_button();

                ?>
              </form>
            </div>
          <?php
  }

  public function create_my_garage_page()
  {
    // Set class property
    $this->my_garage_options = get_option('dealer-settings-my-garage-options');
    ?>
            <div class="wrap">
              <h1>My Garage</h1>
              <form method="post" action="options.php">
                <?php

                settings_fields('dealer-settings-my-garage-options-group');
                do_settings_sections('dealer-settings-my-garage');
                submit_button();

                ?>
              </form>
            </div>
          <?php
  }

  /**
   * Register and add settings
   */
  public function register_labels_settings()
  {
    register_setting(
      'dealer-settings-labels-options-group',
      'dealer-settings-labels-options',
      array($this, 'sanitize')
    );
  }

  public function register_my_garage_settings()
  {
    register_setting(
      'dealer-settings-my-garage-options-group',
      'dealer-settings-my-garage-options',
      array($this, 'sanitize')
    );
  }

  public function calculated_msrp_callback()
  {
    printf(
      '<input type="text" id="calculated_msrp" name="dealer-settings-labels-options[calculated_msrp]" value="%s" />',
      isset($this->labels_options['calculated_msrp']) ? esc_attr($this->labels_options['calculated_msrp']) : ''
    );
  }

  public function calculated_msrp_callback_fr()
  {
    printf(
      '<input type="text" id="calculated_msrp_fr" name="dealer-settings-labels-options[calculated_msrp_fr]" value="%s" />',
      isset($this->labels_options['calculated_msrp_fr']) ? esc_attr($this->labels_options['calculated_msrp_fr']) : ''
    );
  }

  public function additional_rebates_label_callback()
  {
    printf(
      '<input type="text" id="additional_rebates_label" name="dealer-settings-labels-options[additional_rebates_label]" value="%s" />',
      isset($this->labels_options['additional_rebates_label']) ? esc_attr($this->labels_options['additional_rebates_label']) : ''
    );
  }

  public function additional_rebates_label_fr_callback()
  {
    printf(
      '<input type="text" id="additional_rebates_label_fr" name="dealer-settings-labels-options[additional_rebates_label_fr]" value="%s" />',
      isset($this->labels_options['additional_rebates_label_fr']) ? esc_attr($this->labels_options['additional_rebates_label_fr']) : ''
    );
  }

  public function rebates_label_callback()
  {
    printf(
      '<input type="text" id="rebates_label" name="dealer-settings-labels-options[rebates_label]" value="%s" />',
      isset($this->labels_options['rebates_label']) ? esc_attr($this->labels_options['rebates_label']) : ''
    );
  }

  public function rebates_label_fr_callback()
  {
    printf(
      '<input type="text" id="rebates_label_fr" name="dealer-settings-labels-options[rebates_label_fr]" value="%s" />',
      isset($this->labels_options['rebates_label_fr']) ? esc_attr($this->labels_options['rebates_label_fr']) : ''
    );
  }

  public function tax_and_lic_label_callback()
  {
    printf(
      '<input type="text" id="tax_and_lic_label" name="dealer-settings-labels-options[tax_and_lic_label]" value="%s" />',
      isset($this->labels_options['tax_and_lic_label']) ? esc_attr($this->labels_options['tax_and_lic_label']) : ''
    );
  }

  public function tax_and_lic_label_fr_callback()
  {
    printf(
      '<input type="text" id="tax_and_lic_label_fr" name="dealer-settings-labels-options[tax_and_lic_label_fr]" value="%s" />',
      isset($this->labels_options['tax_and_lic_label_fr']) ? esc_attr($this->labels_options['tax_and_lic_label_fr']) : ''
    );
  }

  public function used_tax_and_lic_label_callback()
  {
    printf(
      '<input type="text" id="used_tax_and_lic_label" name="dealer-settings-labels-options[used_tax_and_lic_label]" value="%s" />',
      isset($this->labels_options['used_tax_and_lic_label']) ? esc_attr($this->labels_options['used_tax_and_lic_label']) : ''
    );
  }

  public function used_tax_and_lic_label_fr_callback()
  {
    printf(
      '<input type="text" id="used_tax_and_lic_label_fr" name="dealer-settings-labels-options[used_tax_and_lic_label_fr]" value="%s" />',
      isset($this->labels_options['used_tax_and_lic_label_fr']) ? esc_attr($this->labels_options['used_tax_and_lic_label_fr']) : ''
    );
  }

  //aqui toy
  public function new_tax_label_callback()
  {
    printf(
      '<input type="text" id="new_tax_label" name="dealer-settings-labels-options[new_tax_label]" value="%s" />',
      isset($this->labels_options['new_tax_label']) ? esc_attr($this->labels_options['new_tax_label']) : ''
    );
  }

  public function new_tax_label_fr_callback()
  {
    printf(
      '<input type="text" id="new_tax_label_fr" name="dealer-settings-labels-options[new_tax_label_fr]" value="%s" />',
      isset($this->labels_options['new_tax_label_fr']) ? esc_attr($this->labels_options['new_tax_label_fr']) : ''
    );
  }

  public function used_tax_label_callback()
  {
    printf(
      '<input type="text" id="used_tax_label" name="dealer-settings-labels-options[used_tax_label]" value="%s" />',
      isset($this->labels_options['used_tax_label']) ? esc_attr($this->labels_options['used_tax_label']) : ''
    );
  }

  public function used_tax_label_fr_callback()
  {
    printf(
      '<input type="text" id="used_tax_label_fr" name="dealer-settings-labels-options[used_tax_label_fr]" value="%s" />',
      isset($this->labels_options['used_tax_label_fr']) ? esc_attr($this->labels_options['used_tax_label_fr']) : ''
    );
  }

  //lic

  public function new_lic_label_callback()
  {
    printf(
      '<input type="text" id="new_lic_label" name="dealer-settings-labels-options[new_lic_label]" value="%s" />',
      isset($this->labels_options['new_lic_label']) ? esc_attr($this->labels_options['new_lic_label']) : ''
    );
  }

  public function new_lic_label_fr_callback()
  {
    printf(
      '<input type="text" id="new_lic_label_fr" name="dealer-settings-labels-options[new_lic_label_fr]" value="%s" />',
      isset($this->labels_options['new_lic_label_fr']) ? esc_attr($this->labels_options['new_lic_label_fr']) : ''
    );
  }

  public function used_lic_label_callback()
  {
    printf(
      '<input type="text" id="used_lic_label" name="dealer-settings-labels-options[used_lic_label]" value="%s" />',
      isset($this->labels_options['used_lic_label']) ? esc_attr($this->labels_options['used_lic_label']) : ''
    );
  }

  public function used_lic_label_fr_callback()
  {
    printf(
      '<input type="text" id="used_lic_label_fr" name="dealer-settings-labels-options[used_lic_label_fr]" value="%s" />',
      isset($this->labels_options['used_lic_label_fr']) ? esc_attr($this->labels_options['used_lic_label_fr']) : ''
    );
  }


	//! demo tag

  public function demo_tag_label_callback()
  {
    printf(
      '<input type="text" id="demo_tag_label" name="dealer-settings-labels-options[demo_tag_label]" value="%s" maxlength="13" />',
      isset($this->labels_options['demo_tag_label']) ? esc_attr($this->labels_options['demo_tag_label']) : ''
    );
  }

  public function demo_tag_label_fr_callback()
  {
    printf(
      '<input type="text" id="demo_tag_label_fr" name="dealer-settings-labels-options[demo_tag_label_fr]" value="%s" maxlength="13" />',
      isset($this->labels_options['demo_tag_label_fr']) ? esc_attr($this->labels_options['demo_tag_label_fr']) : ''
    );
  }

	//* added color and character limit input(demo tag)

	public function demo_tag_label_color_callback()
  {
    printf(
      '<input type="color" id="demo_tag_label_color" name="dealer-settings-labels-options[demo_tag_label_color]" value="%s" />',
      isset($this->labels_options['demo_tag_label_color']) ? esc_attr($this->labels_options['demo_tag_label_color']) : ''
    );
  }
	public function demo_tag_label_limit_callback()
  {
    printf(
      '<input type="number" min="5" max="12" style="width: 170px;" placeholder="limit characters" id="demo_tag_label_limit" name="dealer-settings-labels-options[demo_tag_label_limit]" value="%s" />',
      isset($this->labels_options['demo_tag_label_limit']) ? esc_attr($this->labels_options['demo_tag_label_limit']) : ''
    );
  }

	//! salepending tag

  public function salepending_tag_label_callback()
  {
    printf(
      '<input type="text" id="salepending_tag_label" name="dealer-settings-labels-options[salepending_tag_label]" value="%s" maxlength="13" />',
      isset($this->labels_options['salepending_tag_label']) ? esc_attr($this->labels_options['salepending_tag_label']) : ''
    );
  }

  public function salepending_tag_label_fr_callback()
  {
    printf(
      '<input type="text" id="salepending_tag_label_fr" name="dealer-settings-labels-options[salepending_tag_label_fr]" value="%s" maxlength="13" />',
      isset($this->labels_options['salepending_tag_label_fr']) ? esc_attr($this->labels_options['salepending_tag_label_fr']) : ''
    );
  }
	//* added color and character limit input(salepending tag)

	public function salepending_tag_label_color_callback()
  {
    printf(
      '<input type="color" id="salepending_tag_label_color" name="dealer-settings-labels-options[salepending_tag_label_color]" value="%s" />',
      isset($this->labels_options['salepending_tag_label_color']) ? esc_attr($this->labels_options['salepending_tag_label_color']) : ''
    );
  }
	public function salepending_tag_label_limit_callback()
  {
    printf(
      '<input type="number" min="5" max="12" style="width: 170px;" placeholder="limit characters" id="salepending_tag_label_limit" name="dealer-settings-labels-options[salepending_tag_label_limit]" value="%s" />',
      isset($this->labels_options['salepending_tag_label_limit']) ? esc_attr($this->labels_options['salepending_tag_label_limit']) : ''
    );
  }

	//! certified tag

  public function certified_tag_label_callback()
  {
    printf(
      '<input type="text" id="certified_tag_label" name="dealer-settings-labels-options[certified_tag_label]" value="%s" maxlength="13" />',
      isset($this->labels_options['certified_tag_label']) ? esc_attr($this->labels_options['certified_tag_label']) : ''
    );
  }

  public function certified_tag_label_fr_callback()
  {
    printf(
      '<input type="text" id="certified_tag_label_fr" name="dealer-settings-labels-options[certified_tag_label_fr]" value="%s" maxlength="13" />',
      isset($this->labels_options['certified_tag_label_fr']) ? esc_attr($this->labels_options['certified_tag_label_fr']) : ''
    );
  }

	//* added color and character limit input(certified tag)

	public function certified_tag_label_color_callback()
  {
    printf(
      '<input type="color" id="certified_tag_label_color" name="dealer-settings-labels-options[certified_tag_label_color]" value="%s" />',
      isset($this->labels_options['certified_tag_label_color']) ? esc_attr($this->labels_options['certified_tag_label_color']) : ''
    );
  }
	public function certified_tag_label_limit_callback()
  {
    printf(
      '<input type="number" min="5" max="12" style="width: 170px;" placeholder="limit characters" id="certified_tag_label_limit" name="dealer-settings-labels-options[certified_tag_label_limit]" value="%s" />',
      isset($this->labels_options['certified_tag_label_limit']) ? esc_attr($this->labels_options['certified_tag_label_limit']) : ''
    );
  }

	//! special tag

  public function special_tag_label_callback()
  {
    printf(
      '<input type="text" id="special_tag_label" name="dealer-settings-labels-options[special_tag_label]" value="%s" maxlength="13" />',
      isset($this->labels_options['special_tag_label']) ? esc_attr($this->labels_options['special_tag_label']) : ''
    );
  }

  public function special_tag_label_fr_callback()
  {
    printf(
      '<input type="text" id="special_tag_label_fr" name="dealer-settings-labels-options[special_tag_label_fr]" value="%s" maxlength="13" />',
      isset($this->labels_options['special_tag_label_fr']) ? esc_attr($this->labels_options['special_tag_label_fr']) : ''
    );
  }

	//* added color and character limit input(special tag)

	public function special_tag_label_color_callback()
  {
    printf(
      '<input type="color" id="special_tag_label_color" name="dealer-settings-labels-options[special_tag_label_color]" value="%s" />',
      isset($this->labels_options['special_tag_label_color']) ? esc_attr($this->labels_options['special_tag_label_color']) : ''
    );
  }
	public function special_tag_label_limit_callback()
  {
    printf(
      '<input type="number" min="5" max="12" placeholder="limit characters" id="special_tag_label_limit" name="dealer-settings-labels-options[special_tag_label_limit]" value="%s" style="width: 170px;" />',
      isset($this->labels_options['special_tag_label_limit']) ? esc_attr($this->labels_options['special_tag_label_limit']) : ''
    );
  }

	//! asis tag

  public function asis_tag_label_callback()
  {
    printf(
      '<input type="text" id="asis_tag_label" name="dealer-settings-labels-options[asis_tag_label]" value="%s" maxlength="13" />',
      isset($this->labels_options['asis_tag_label']) ? esc_attr($this->labels_options['asis_tag_label']) : ''
    );
  }

  public function asis_tag_label_fr_callback()
  {
    printf(
      '<input type="text" id="asis_tag_label_fr" name="dealer-settings-labels-options[asis_tag_label_fr]" value="%s" maxlength="13" />',
      isset($this->labels_options['asis_tag_label_fr']) ? esc_attr($this->labels_options['asis_tag_label_fr']) : ''
    );
  }

		//* added color and character limit input(asis tag)

		public function asis_tag_label_color_callback()
		{
			printf(
				'<input type="color" id="asis_tag_label_color" name="dealer-settings-labels-options[asis_tag_label_color]" value="%s" />',
				isset($this->labels_options['asis_tag_label_color']) ? esc_attr($this->labels_options['asis_tag_label_color']) : ''
			);
		}
		public function asis_tag_label_limit_callback()
		{
			printf(
				'<input type="number" min="5" max="12" style="width: 170px;" placeholder="limit characters" id="asis_tag_label_limit" name="dealer-settings-labels-options[asis_tag_label_limit]" value="%s" />',
				isset($this->labels_options['asis_tag_label_limit']) ? esc_attr($this->labels_options['asis_tag_label_limit']) : ''
			);
		}

	//! incoming tag

  public function incoming_tag_label_callback()
  {
    printf(
      '<input type="text" id="incoming_tag_label" name="dealer-settings-labels-options[incoming_tag_label]" value="%s" maxlength="13" />',
      isset($this->labels_options['incoming_tag_label']) ? esc_attr($this->labels_options['incoming_tag_label']) : ''
    );
  }

  public function incoming_tag_label_fr_callback()
  {
    printf(
      '<input type="text" id="incoming_tag_label_fr" name="dealer-settings-labels-options[incoming_tag_label_fr]" value="%s" maxlength="13" />',
      isset($this->labels_options['incoming_tag_label_fr']) ? esc_attr($this->labels_options['incoming_tag_label_fr']) : ''
    );
  }

	//* added color and character limit input(incoming tag)

	public function incoming_tag_label_color_callback()
	{
		printf(
			'<input type="color" id="incoming_tag_label_color" name="dealer-settings-labels-options[incoming_tag_label_color]" value="%s" />',
			isset($this->labels_options['incoming_tag_label_color']) ? esc_attr($this->labels_options['incoming_tag_label_color']) : ''
		);
	}
	public function incoming_tag_label_limit_callback()
	{
		printf(
			'<input type="number" min="5" max="12" style="width: 170px;" placeholder="limit characters" id="incoming_tag_label_limit" name="dealer-settings-labels-options[incoming_tag_label_limit]" value="%s" />',
			isset($this->labels_options['incoming_tag_label_limit']) ? esc_attr($this->labels_options['incoming_tag_label_limit']) : ''
		);
	}


	/*<<<< PHONE SECCION >>>>*/

  public function phone_sales_label_callback()
  {
    printf(
      '<input type="text" id="phone_sales_label" name="dealer-settings-labels-options[phone_sales_label]" value="%s" />',
      isset($this->labels_options['phone_sales_label']) ? esc_attr($this->labels_options['phone_sales_label']) : ''
    );
  }

  public function phone_sales_label_fr_callback()
  {
    printf(
      '<input type="text" id="phone_sales_label_fr" name="dealer-settings-labels-options[phone_sales_label_fr]" value="%s" />',
      isset($this->labels_options['phone_sales_label_fr']) ? esc_attr($this->labels_options['phone_sales_label_fr']) : ''
    );
  }

  public function phone_parts_label_callback()
  {
    printf(
      '<input type="text" id="phone_parts_label" name="dealer-settings-labels-options[phone_parts_label]" value="%s" />',
      isset($this->labels_options['phone_parts_label']) ? esc_attr($this->labels_options['phone_parts_label']) : ''
    );
  }

  public function phone_parts_label_fr_callback()
  {
    printf(
      '<input type="text" id="phone_parts_label_fr" name="dealer-settings-labels-options[phone_parts_label_fr]" value="%s" />',
      isset($this->labels_options['phone_parts_label_fr']) ? esc_attr($this->labels_options['phone_parts_label_fr']) : ''
    );
  }

  public function phone_service_label_callback()
  {
    printf(
      '<input type="text" id="phone_service_label" name="dealer-settings-labels-options[phone_service_label]" value="%s" />',
      isset($this->labels_options['phone_service_label']) ? esc_attr($this->labels_options['phone_service_label']) : ''
    );
  }

  public function phone_service_label_fr_callback()
  {
    printf(
      '<input type="text" id="phone_service_label_fr" name="dealer-settings-labels-options[phone_service_label_fr]" value="%s" />',
      isset($this->labels_options['phone_service_label_fr']) ? esc_attr($this->labels_options['phone_service_label_fr']) : ''
    );
  }

  public function phone_fax_label_callback()
  {
    printf(
      '<input type="text" id="phone_fax_label" name="dealer-settings-labels-options[phone_fax_label]" value="%s" />',
      isset($this->labels_options['phone_fax_label']) ? esc_attr($this->labels_options['phone_fax_label']) : ''
    );
  }

  public function phone_fax_label_fr_callback()
  {
    printf(
      '<input type="text" id="phone_fax_label_fr" name="dealer-settings-labels-options[phone_fax_label_fr]" value="%s" />',
      isset($this->labels_options['phone_fax_label_fr']) ? esc_attr($this->labels_options['phone_fax_label_fr']) : ''
    );
  }

  public function phone_body_shop_label_callback()
  {
    printf(
      '<input type="text" id="phone_body_shop_label" name="dealer-settings-labels-options[phone_body_shop_label]" value="%s" />',
      isset($this->labels_options['phone_body_shop_label']) ? esc_attr($this->labels_options['phone_body_shop_label']) : ''
    );
  }

  public function phone_body_shop_label_fr_callback()
  {
    printf(
      '<input type="text" id="phone_body_shop_label_fr" name="dealer-settings-labels-options[phone_body_shop_label_fr]" value="%s" />',
      isset($this->labels_options['phone_body_shop_label_fr']) ? esc_attr($this->labels_options['phone_body_shop_label_fr']) : ''
    );
  }

  public function phone_collision_label_callback()
  {
    printf(
      '<input type="text" id="phone_collision_label" name="dealer-settings-labels-options[phone_collision_label]" value="%s" />',
      isset($this->labels_options['phone_collision_label']) ? esc_attr($this->labels_options['phone_collision_label']) : ''
    );
  }

  public function phone_collision_label_fr_callback()
  {
    printf(
      '<input type="text" id="phone_collision_label_fr" name="dealer-settings-labels-options[phone_collision_label_fr]" value="%s" />',
      isset($this->labels_options['phone_collision_label_fr']) ? esc_attr($this->labels_options['phone_collision_label_fr']) : ''
    );
  }

  public function phone_accessories_label_callback()
  {
    printf(
      '<input type="text" id="phone_accessories_label" name="dealer-settings-labels-options[phone_accessories_label]" value="%s" />',
      isset($this->labels_options['phone_accessories_label']) ? esc_attr($this->labels_options['phone_accessories_label']) : ''
    );
  }

  public function phone_accessories_label_fr_callback()
  {
    printf(
      '<input type="text" id="phone_accessories_label_fr" name="dealer-settings-labels-options[phone_accessories_label_fr]" value="%s" />',
      isset($this->labels_options['phone_accessories_label_fr']) ? esc_attr($this->labels_options['phone_accessories_label_fr']) : ''
    );
  }

  public function phone_sms_label_callback()
  {
    printf(
      '<input type="text" id="phone_sms_label" name="dealer-settings-labels-options[phone_sms_label]" value="%s" />',
      isset($this->labels_options['phone_sms_label']) ? esc_attr($this->labels_options['phone_sms_label']) : ''
    );
  }

  public function phone_sms_label_fr_callback()
  {
    printf(
      '<input type="text" id="phone_sms_label_fr" name="dealer-settings-labels-options[phone_sms_label_fr]" value="%s" />',
      isset($this->labels_options['phone_sms_label_fr']) ? esc_attr($this->labels_options['phone_sms_label_fr']) : ''
    );
  }

  public function special_price_callback()
  {
    printf(
      '<input type="text" id="special_price" name="dealer-settings-labels-options[special_price]" value="%s" />',
      isset($this->labels_options['special_price']) ? esc_attr($this->labels_options['special_price']) : ''
    );
  }

  public function special_price_fr_callback()
  {
    printf(
      '<input type="text" id="special_price_fr" name="dealer-settings-labels-options[special_price_fr]" value="%s" />',
      isset($this->labels_options['special_price_fr']) ? esc_attr($this->labels_options['special_price_fr']) : ''
    );
  }

  public function special_discount_price_callback()
  {
    printf(
      '<input type="text" id="special_discount_price" name="dealer-settings-labels-options[special_discount_price]" value="%s" />',
      isset($this->labels_options['special_discount_price']) ? esc_attr($this->labels_options['special_discount_price']) : ''
    );
  }

  public function special_discount_price_fr_callback()
  {
    printf(
      '<input type="text" id="special_discount_price_fr" name="dealer-settings-labels-options[special_discount_price_fr]" value="%s" />',
      isset($this->labels_options['special_discount_price_fr']) ? esc_attr($this->labels_options['special_discount_price_fr']) : ''
    );
  }

  public function after_discount_price_callback()
  {
    printf(
      '<input type="text" id="after_discount_price" name="dealer-settings-labels-options[after_discount_price]" value="%s" />',
      isset($this->labels_options['after_discount_price']) ? esc_attr($this->labels_options['after_discount_price']) : ''
    );
  }

   public function used_after_discount_price_callback()
  {
    printf(
      '<input type="text" id="used_after_discount_price" name="dealer-settings-labels-options[used_after_discount_price]" value="%s" />',
      isset($this->labels_options['used_after_discount_price']) ? esc_attr($this->labels_options['used_after_discount_price']) : ''
    );
  }

  public function after_discount_price_fr_callback()
  {
    printf(
      '<input type="text" id="after_discount_price_fr" name="dealer-settings-labels-options[after_discount_price_fr]" value="%s" />',
      isset($this->labels_options['after_discount_price_fr']) ? esc_attr($this->labels_options['after_discount_price_fr']) : ''
    );
  }

  public function used_after_discount_price_fr_callback()
  {
    printf(
      '<input type="text" id="used_after_discount_price_fr" name="dealer-settings-labels-options[used_after_discount_price_fr]" value="%s" />',
      isset($this->labels_options['used_after_discount_price_fr']) ? esc_attr($this->labels_options['used_after_discount_price_fr']) : ''
    );
  }

  public function used_vehicle_price_label_callback()
  {
    printf(
      '<input type="text" id="used_vehicle_price" name="dealer-settings-labels-options[used_vehicle_price]" value="%s" />',
      isset($this->labels_options['used_vehicle_price']) ? esc_attr($this->labels_options['used_vehicle_price']) : ''
    );
  }

  public function used_vehicle_price_label_fr_callback()
  {
    printf(
      '<input type="text" id="used_vehicle_price_fr" name="dealer-settings-labels-options[used_vehicle_price_fr]" value="%s" />',
      isset($this->labels_options['used_vehicle_price_fr']) ? esc_attr($this->labels_options['used_vehicle_price_fr']) : ''
    );
  }

  public function new_vehicle_price_label_callback()
  {
    printf(
      '<input type="text" id="new_vehicle_price" name="dealer-settings-labels-options[new_vehicle_price]" value="%s" />',
      isset($this->labels_options['new_vehicle_price']) ? esc_attr($this->labels_options['new_vehicle_price']) : ''
    );
  }

  public function new_vehicle_price_label_fr_callback()
  {
    printf(
      '<input type="text" id="new_vehicle_price_fr" name="dealer-settings-labels-options[new_vehicle_price_fr]" value="%s" />',
      isset($this->labels_options['new_vehicle_price_fr']) ? esc_attr($this->labels_options['new_vehicle_price_fr']) : ''
    );
  }

  public function my_garage_option_callback()
  {
    if (!isset($this->my_garage_options['my_garage_status'])) {
      $this->my_garage_options['my_garage_status'] = "Disabled";
    }

    echo '<select id="my_garage" name="dealer-settings-my-garage-options[my_garage_status]">';
    if (strtolower($this->my_garage_options['my_garage_status']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->my_garage_options['my_garage_status']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }
	/**
   * Options page callback
   */
  public function create_listing_image_page()
  {
    // LBT-1462: repeatable list of inventory-insert images. UI styled to match
    // the LBX Slider admin (design tokens + .lbx-* components).
    ?>
    <div class="wrap lbx-admin lbx-listing-admin">
      <div class="lbx-header">
        <div class="lbx-header-left">
          <div class="lbx-header-icon"><span class="dashicons dashicons-images-alt2"></span></div>
          <div>
            <h1>LBX Listing Images</h1>
            <p>Insert promotional images between the SRP vehicle cards, each with its own link and position.</p>
          </div>
        </div>
      </div>

      <div id="lbx-listing-notices"></div>
      <div id="response-message"></div>

      <?php
      // LBT-1462 Round 3: this page is now the Image Groups manager ONLY. The legacy
      // "Global" config UI (Round 2) has been retired — its markup below is wrapped in
      // `if (false)` so it never runs or renders, while the shared .lbx-* <style> after
      // it still styles the groups manager. (Round 2 methods stay defined but unused.)
      if (class_exists('LBX_Listing_Image_Groups')) {
        LBX_Listing_Image_Groups::instance()->render_manager();
      } else {
        echo '<div class="lbx-empty"><p>Image Groups module unavailable.</p></div>';
      }
      ?>
    </div>

    <?php if (false) : // legacy global config UI (retired) ?>
      <?php $cfg = $this->get_listing_images_config_admin(); ?>
      <div class="lbx-card">
        <div class="lbx-card-header"><h2><span class="dashicons dashicons-randomize"></span> Placement Mode</h2></div>
        <div class="lbx-card-body">
          <div class="lbx-field">
            <label class="lbx-label">Mode</label>
            <label class="lbx-radio" style="display:block;margin:4px 0;"><input type="radio" name="li_mode" value="grouped" <?php checked($cfg['mode'], 'grouped'); ?>> <strong>Grouped</strong> — all images cycle one after another (A B C A B C…) every <em>offset</em> cards</label>
            <label class="lbx-radio" style="display:block;margin:4px 0;"><input type="radio" name="li_mode" value="individual" <?php checked($cfg['mode'], 'individual'); ?>> <strong>Individual</strong> — each image uses its own Insert After / Repeat Every</label>
          </div>
          <div class="lbx-panel-grid li-group-fields"<?php if ($cfg['mode'] !== 'grouped') echo ' style="display:none;"'; ?>>
            <div class="lbx-field"><label class="lbx-label">Offset <span class="lbx-label-hint">cards between images</span></label><input type="number" min="1" id="li_group_offset" class="lbx-input" value="<?php echo esc_attr($cfg['offset']); ?>"></div>
            <div class="lbx-field"><label class="lbx-label">Repeat <span class="lbx-label-hint">full cycles, 0 = until end</span></label><input type="number" min="0" id="li_group_repeat" class="lbx-input" value="<?php echo esc_attr($cfg['repeat']); ?>"></div>
          </div>
        </div>
        <div class="lbx-card-footer">
          <button id="save-listing-config" type="button" class="lbx-btn lbx-btn-primary"><span class="dashicons dashicons-saved"></span> Save Placement</button>
        </div>
      </div>

      <div class="lbx-card">
        <div class="lbx-card-header"><h2><span class="dashicons dashicons-plus-alt2"></span> Add New Image</h2></div>
        <div class="lbx-card-body">
          <div class="lbx-field">
            <label class="lbx-label">Image <span class="lbx-req-star">*</span></label>
            <div class="lbx-slide-image lbx-pick-image" id="li_image_preview">
              <div class="lbx-slide-image-ph"><span class="dashicons dashicons-cloud-upload"></span><span>Click to upload</span></div>
            </div>
            <input type="hidden" id="li_image" value="">
          </div>

          <div class="lbx-panel-grid">
            <div class="lbx-field"><label class="lbx-label">Link</label><input type="text" id="li_link" class="lbx-input" placeholder="https://... or /specials"></div>
            <div class="lbx-field"><label class="lbx-label">Open in</label><?php echo $this->listing_image_select_html('li_target', 'target', '_self'); ?></div>
            <div class="lbx-field li-position-field"><label class="lbx-label">Insert After <span class="lbx-label-hint">card #</span></label><input type="number" min="0" id="li_insert_after" class="lbx-input" value="0"></div>
            <div class="lbx-field li-position-field"><label class="lbx-label">Repeat Every <span class="lbx-label-hint">0 = once</span></label><input type="number" min="0" id="li_repeat_every" class="lbx-input" value="0"></div>
            <div class="lbx-field"><label class="lbx-label">Condition</label><?php echo $this->listing_image_select_html('li_condition', 'condition', 'both'); ?></div>
            <div class="lbx-field"><label class="lbx-label">Language</label><?php echo $this->listing_image_select_html('li_language', 'language', 'both'); ?></div>
            <div class="lbx-field"><label class="lbx-label">Image Fit</label><?php echo $this->listing_image_select_html('li_fit', 'fit', 'contain'); ?></div>
            <div class="lbx-field"><label class="lbx-label">Limit Date</label><input type="date" id="li_limit_date" class="lbx-input"></div>
            <div class="lbx-field"><label class="lbx-label">Alt Text <span class="lbx-label-hint">accessibility</span></label><input type="text" id="li_alt" class="lbx-input"></div>
          </div>

          <label class="lbx-toggle"><input type="checkbox" id="li_activate" value="1"><span class="lbx-toggle-track"></span><span class="lbx-toggle-label">Expire on limit date</span></label>
        </div>
        <div class="lbx-card-footer">
          <button id="save-listing-image" name="save-listing-image" type="button" class="lbx-btn lbx-btn-primary"><span class="dashicons dashicons-plus-alt2"></span> Add Image</button>
        </div>
      </div>

      <div class="lbx-card">
        <div class="lbx-card-header"><h2><span class="dashicons dashicons-list-view"></span> Configured Images</h2></div>
        <div class="lbx-card-body">
          <?php $this->display_listing_images_saved_data(); ?>
        </div>
      </div>
    <?php endif; // LBT-1462 R3: end retired legacy global config UI ?>

    <style>
      :root {
        --lbx-primary:#2563eb; --lbx-primary-hover:#1d4ed8; --lbx-primary-light:#eff6ff; --lbx-primary-lighter:#f8faff;
        --lbx-danger:#dc2626; --lbx-danger-bg:#fef2f2;
        --lbx-gray-50:#f9fafb; --lbx-gray-100:#f3f4f6; --lbx-gray-200:#e5e7eb; --lbx-gray-300:#d1d5db;
        --lbx-gray-400:#9ca3af; --lbx-gray-500:#6b7280; --lbx-gray-600:#4b5563; --lbx-gray-700:#374151;
        --lbx-gray-800:#1f2937; --lbx-gray-900:#111827;
        --lbx-radius:10px; --lbx-radius-sm:6px;
        --lbx-shadow:0 1px 3px rgba(0,0,0,0.08),0 1px 2px rgba(0,0,0,0.04);
        --lbx-shadow-md:0 4px 6px -1px rgba(0,0,0,0.07),0 2px 4px -2px rgba(0,0,0,0.05);
      }
      .lbx-admin { max-width:960px; font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; margin-right:16px; }
      .lbx-admin * { box-sizing:border-box; }
      .lbx-header { display:flex; align-items:center; justify-content:space-between; margin:16px 0; }
      .lbx-header-left { display:flex; align-items:center; gap:12px; }
      .lbx-header-icon { width:34px; height:34px; background:linear-gradient(135deg,var(--lbx-primary),#7c3aed); border-radius:10px; display:flex; align-items:center; justify-content:center; color:#fff; box-shadow:0 2px 8px rgba(37,99,235,0.22); }
      .lbx-header-icon .dashicons { color:#fff; }
      .lbx-header h1 { margin:0; font-size:18px; font-weight:700; color:var(--lbx-gray-900); letter-spacing:-0.01em; }
      .lbx-header p { margin:2px 0 0; font-size:12px; color:var(--lbx-gray-500); }

      .lbx-card { background:#fff; border:1px solid var(--lbx-gray-200); border-radius:var(--lbx-radius); box-shadow:var(--lbx-shadow); margin-bottom:24px; overflow:hidden; transition:box-shadow .2s; }
      .lbx-card:hover { box-shadow:var(--lbx-shadow-md); }
      .lbx-card-header { display:flex; align-items:center; justify-content:space-between; padding:16px 24px; border-bottom:1px solid var(--lbx-gray-100); background:var(--lbx-gray-50); }
      .lbx-card-header h2 { margin:0; font-size:16px; font-weight:700; color:var(--lbx-gray-900); display:flex; align-items:center; gap:8px; }
      .lbx-card-header h2 .dashicons { color:var(--lbx-primary); }
      .lbx-card-body { padding:24px; }
      .lbx-card-footer { padding:16px 24px; border-top:1px solid var(--lbx-gray-200); background:var(--lbx-gray-50); display:flex; align-items:center; gap:12px; }

      .lbx-panel-grid { display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-bottom:14px; }
      .lbx-field { margin-bottom:16px; }
      .lbx-field:last-child { margin-bottom:0; }
      .lbx-label { display:block; font-size:13px; font-weight:600; color:var(--lbx-gray-700); margin-bottom:6px; }
      .lbx-mini-label { display:block; font-size:11px; font-weight:600; color:var(--lbx-gray-600); margin-bottom:4px; text-transform:uppercase; letter-spacing:.03em; }
      .lbx-label-hint { font-weight:400; color:var(--lbx-gray-400); font-size:12px; margin-left:4px; text-transform:none; letter-spacing:0; }
      .lbx-req-star { color:var(--lbx-danger); font-weight:700; margin-left:2px; }
      /* High-specificity + explicit type coverage so WP core's input[type=...]
         rules can't override height/padding — keeps every field the same size. */
      .lbx-admin input.lbx-input,
      .lbx-admin select.lbx-input,
      .lbx-admin textarea.lbx-input {
        display:block; width:100%; max-width:100%; margin:0; height:40px; min-height:40px; padding:0 12px;
        border:1px solid var(--lbx-gray-300); border-radius:8px; background-color:#fff;
        font-size:13px; line-height:1.4; color:var(--lbx-gray-800); vertical-align:middle;
        box-shadow:none; outline:none; transition:border-color .15s, box-shadow .15s;
      }
      .lbx-admin textarea.lbx-input { height:auto; min-height:80px; padding:10px 12px; line-height:1.5; resize:vertical; }
      .lbx-admin input.lbx-input:hover,
      .lbx-admin select.lbx-input:hover,
      .lbx-admin textarea.lbx-input:hover { border-color:var(--lbx-gray-400); }
      .lbx-admin input.lbx-input:focus,
      .lbx-admin select.lbx-input:focus,
      .lbx-admin textarea.lbx-input:focus { border-color:var(--lbx-primary); box-shadow:0 0 0 3px rgba(37,99,235,0.14); outline:none; }
      .lbx-admin input.lbx-input::placeholder { color:var(--lbx-gray-400); }
      .lbx-admin input.lbx-input[type="number"] { -moz-appearance:textfield; }
      /* Custom chevron so selects match the text inputs exactly */
      .lbx-admin select.lbx-input {
        -webkit-appearance:none; -moz-appearance:none; appearance:none; padding-right:34px; cursor:pointer;
        background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
        background-repeat:no-repeat; background-position:right 12px center; background-size:14px;
      }
      .lbx-admin select.lbx-input:hover,
      .lbx-admin select.lbx-input:focus {
        background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%232563eb' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
      }

      .lbx-toggle { display:inline-flex; align-items:center; gap:10px; cursor:pointer; margin-top:4px; font-size:13px; color:var(--lbx-gray-700); }
      .lbx-toggle input { display:none; }
      .lbx-toggle-track { width:44px; height:24px; background:var(--lbx-gray-300); border-radius:12px; position:relative; transition:background .2s; flex:0 0 auto; }
      .lbx-toggle input:checked + .lbx-toggle-track { background:var(--lbx-primary); }
      .lbx-toggle-track::after { content:''; position:absolute; top:2px; left:2px; width:20px; height:20px; background:#fff; border-radius:50%; transition:transform .2s; box-shadow:0 1px 3px rgba(0,0,0,0.15); }
      .lbx-toggle input:checked + .lbx-toggle-track::after { transform:translateX(20px); }

      .lbx-btn { display:inline-flex; align-items:center; gap:6px; padding:10px 20px; border-radius:var(--lbx-radius-sm); font-size:13px; font-weight:600; cursor:pointer; transition:all .15s; border:none; outline:none; text-decoration:none; line-height:1; }
      .lbx-btn .dashicons { font-size:16px; width:16px; height:16px; }
      .lbx-btn-primary { background:linear-gradient(135deg,var(--lbx-primary),#1d4ed8); color:#fff; box-shadow:0 1px 3px rgba(37,99,235,0.3); }
      .lbx-btn-primary:hover { background:linear-gradient(135deg,var(--lbx-primary-hover),#1e40af); box-shadow:0 4px 12px rgba(37,99,235,0.35); color:#fff; }
      .lbx-btn-primary:active { transform:translateY(1px); }
      .lbx-btn-danger { background:transparent; color:var(--lbx-danger); border:1px solid var(--lbx-gray-200); }
      .lbx-btn-danger:hover { background:var(--lbx-danger-bg); border-color:#fecaca; }

      .lbx-slide-image { width:220px; height:120px; background:var(--lbx-gray-50); border:2px dashed var(--lbx-gray-300); border-radius:var(--lbx-radius-sm); display:flex; align-items:center; justify-content:center; cursor:pointer; overflow:hidden; position:relative; transition:all .15s; }
      .lbx-slide-image:hover { border-color:var(--lbx-primary); background:var(--lbx-primary-lighter); }
      .lbx-slide-image img { width:100%; height:100%; object-fit:cover; display:block; }
      .lbx-slide-image-ph { text-align:center; color:var(--lbx-gray-400); font-size:12px; }
      .lbx-slide-image-ph .dashicons { font-size:26px; width:26px; height:26px; display:block; margin:0 auto 4px; color:var(--lbx-gray-300); }

      .lbx-slide { background:#fff; border:1px solid var(--lbx-gray-200); border-radius:var(--lbx-radius); margin-bottom:12px; overflow:hidden; transition:box-shadow .2s, border-color .2s; }
      .lbx-slide:hover { box-shadow:var(--lbx-shadow-md); }
      .lbx-slide-header { display:flex; align-items:center; gap:12px; padding:12px 16px; background:var(--lbx-gray-50); border-bottom:1px solid var(--lbx-gray-100); cursor:pointer; user-select:none; }
      .lbx-slide--collapsed .lbx-slide-header { border-bottom-color:transparent; }
      .lbx-slide-select { display:inline-flex; margin:0; }
      .lbx-slide-num { width:26px; height:26px; background:var(--lbx-primary); color:#fff; border-radius:7px; display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:700; flex:0 0 auto; }
      .lbx-slide-title { font-size:13px; font-weight:600; color:var(--lbx-gray-700); flex:1; }
      .lbx-slide-actions { display:flex; align-items:center; gap:6px; }
      .lbx-slide-actions button { background:#fff; border:1px solid var(--lbx-gray-300); border-radius:var(--lbx-radius-sm); width:30px; height:30px; display:inline-flex; align-items:center; justify-content:center; cursor:pointer; color:var(--lbx-gray-600); transition:all .15s; }
      .lbx-slide-actions button:hover { border-color:var(--lbx-gray-400); background:var(--lbx-gray-50); }
      .lbx-slide-actions .li-remove:hover { border-color:#fecaca; background:var(--lbx-danger-bg); color:var(--lbx-danger); }
      .lbx-slide-actions .dashicons { font-size:16px; width:16px; height:16px; }
      .lbx-slide-chevron { color:var(--lbx-gray-400); transition:transform .2s; margin-left:2px; }
      .lbx-slide--collapsed .lbx-slide-chevron { transform:rotate(180deg); }
      .lbx-slide--collapsed .lbx-slide-body { display:none; }
      .lbx-slide-body { padding:18px 16px; }
      .lbx-slide-top-row { display:flex; gap:20px; align-items:flex-start; }
      .lbx-slide-image-col { flex:0 0 auto; }
      .lbx-slide-fields { flex:1; min-width:0; }

      .lbx-seed-note { display:flex; align-items:center; gap:8px; padding:10px 14px; margin-bottom:16px; background:var(--lbx-primary-light); border:1px solid #bfdbfe; border-radius:var(--lbx-radius-sm); color:#1e3a8a; font-size:13px; }
      .lbx-empty { text-align:center; padding:32px; color:var(--lbx-gray-400); }
      .lbx-empty .dashicons { font-size:36px; width:36px; height:36px; display:block; margin:0 auto 8px; }
      .lbx-listing-actions { display:flex; gap:12px; margin-top:18px; }
      #response-message:empty { display:none; }
      #response-message .msg, #response-message .msg-er { padding:10px 14px; border-radius:var(--lbx-radius-sm); margin:0 0 14px; font-size:13px; }
      #response-message .msg { background:#ecfdf5; color:#065f46; border:1px solid #a7f3d0; }
      #response-message .msg-er { background:var(--lbx-danger-bg); color:#991b1b; border:1px solid #fecaca; }

      @media screen and (max-width: 782px) {
        .lbx-panel-grid { grid-template-columns:1fr; }
        .lbx-slide-top-row { flex-direction:column; }
        .lbx-slide-image, .lbx-slide-image-col { width:100%; }
        .lbx-slide-image { height:160px; }
      }
    </style>
    <?php
  }

  /**
   * LBT-1462 helpers: option name, select markup, sanitize, admin seed.
   */
  private function listing_images_option_name()
  {
    return 'dealer-settings-listing-images-options';
  }

  // Companion option holding the global placement config (mode/offset/repeat).
  private function listing_images_config_name()
  {
    return 'dealer-settings-listing-images-config';
  }

  // Current placement config with defaults. 'grouped' is the default mode.
  private function get_listing_images_config_admin()
  {
    $cfg = get_option($this->listing_images_config_name(), array());
    $cfg = is_array($cfg) ? $cfg : array();

    $mode = isset($cfg['mode']) ? strtolower(trim($cfg['mode'])) : 'grouped';
    if (!in_array($mode, array('grouped', 'individual'), true)) {
      $mode = 'grouped';
    }

    return array(
      'mode'   => $mode,
      'offset' => isset($cfg['offset']) ? absint($cfg['offset']) : 0,
      'repeat' => isset($cfg['repeat']) ? absint($cfg['repeat']) : 0,
    );
  }

  // AJAX: persist the placement config (mode/offset/repeat).
  public function save_listing_images_config()
  {
    check_ajax_referer('save_listing_image_nonce', 'nonce');

    $mode = isset($_POST['mode']) ? strtolower(trim(sanitize_text_field(wp_unslash($_POST['mode'])))) : 'grouped';
    if (!in_array($mode, array('grouped', 'individual'), true)) {
      $mode = 'grouped';
    }

    $config = array(
      'mode'   => $mode,
      'offset' => isset($_POST['offset']) ? absint($_POST['offset']) : 0,
      'repeat' => isset($_POST['repeat']) ? absint($_POST['repeat']) : 0,
    );

    update_option($this->listing_images_config_name(), $config);
    wp_send_json_success(array('message' => 'Placement settings saved.', 'config' => $config));
  }

  // Render a <select> for target/condition/language with the given selected value.
  public function listing_image_select_html($id, $type, $selected, $name = null)
  {
    $choices = array(
      'target'    => array('_self' => 'Same tab', '_blank' => 'New tab'),
      'condition' => array('both' => 'Both', 'new' => 'New', 'used' => 'Used'),
      'language'  => array('both' => 'Both', 'en' => 'English', 'fr' => 'French'),
      'fit'       => array('contain' => 'Contain (no crop)', 'cover' => 'Cover (fill & crop)'),
    );
    $opts = isset($choices[$type]) ? $choices[$type] : array();
    $name_attr = $name ? ' name="' . esc_attr($name) . '"' : '';
    $id_attr = $id ? ' id="' . esc_attr($id) . '"' : '';
    $html = '<select' . $id_attr . $name_attr . ' class="lbx-input">';
    foreach ($opts as $val => $label) {
      $html .= '<option value="' . esc_attr($val) . '" ' . selected($selected, $val, false) . '>' . esc_html($label) . '</option>';
    }
    $html .= '</select>';
    return $html;
  }

  // Normalize + sanitize a single posted/stored entry to a stable shape.
  public function sanitize_listing_image_entry($entry)
  {
    $entry = is_array($entry) ? $entry : array();

    $condition = isset($entry['condition']) ? strtolower(sanitize_text_field($entry['condition'])) : 'both';
    if (!in_array($condition, array('new', 'used', 'both'), true)) {
      $condition = 'both';
    }
    $language = isset($entry['language']) ? strtolower(sanitize_text_field($entry['language'])) : 'both';
    if (!in_array($language, array('en', 'fr', 'both'), true)) {
      $language = 'both';
    }
    $target = isset($entry['target']) ? sanitize_text_field($entry['target']) : '_self';
    if (!in_array($target, array('_self', '_blank'), true)) {
      $target = '_self';
    }
    $fit = isset($entry['fit']) ? strtolower(sanitize_text_field($entry['fit'])) : 'contain';
    if (!in_array($fit, array('cover', 'contain'), true)) {
      $fit = 'contain';
    }

    $activate_raw = isset($entry['activate_limit_date']) ? $entry['activate_limit_date'] : 'Disabled';
    $activate = ($activate_raw === 'Enabled' || $activate_raw === '1' || $activate_raw === 1 || $activate_raw === true) ? 'Enabled' : 'Disabled';

    $limit_date = isset($entry['limit_date']) ? sanitize_text_field($entry['limit_date']) : '';
    // keep only a valid Y-m-d, otherwise drop it
    if ($limit_date !== '') {
      $d = DateTime::createFromFormat('Y-m-d', $limit_date);
      if (!$d || $d->format('Y-m-d') !== $limit_date) {
        $limit_date = '';
      }
    }

    return array(
      'image'               => isset($entry['image']) ? esc_url_raw(trim($entry['image'])) : '',
      'link'                => isset($entry['link']) ? esc_url_raw(trim($entry['link'])) : '',
      'target'              => $target,
      'insert_after'        => isset($entry['insert_after']) ? absint($entry['insert_after']) : 0,
      'repeat_every'        => isset($entry['repeat_every']) ? absint($entry['repeat_every']) : 0,
      'condition'           => $condition,
      'language'            => $language,
      'fit'                 => $fit,
      'limit_date'          => $limit_date,
      'activate_limit_date' => $activate,
      'alt'                 => isset($entry['alt']) ? sanitize_text_field($entry['alt']) : '',
    );
  }

  // Entries to show in the admin table: the repeater option, or (when empty) a
  // seed migrated from the legacy single-image keys so nothing is lost. Returns
  // array('entries' => [...], 'seeded' => bool).
  private function get_listing_images_admin()
  {
    $entries = get_option($this->listing_images_option_name(), array());
    if (is_string($entries) && $entries === '[]') {
      $entries = array();
    }
    if (is_array($entries) && !empty($entries)) {
      return array('entries' => array_map(array($this, 'sanitize_listing_image_entry'), $entries), 'seeded' => false);
    }

    // seed from legacy flat option
    $legacy = get_option('dealer-settings-listing-options', array());
    $legacy = is_array($legacy) ? $legacy : array();
    $interval = isset($legacy['insert_after_new']) ? absint($legacy['insert_after_new']) : 0;

    $map = array(
      array('image_new',     'link_new',     'new',  'en', 'limit_date_new',  'activate_limit_date'),
      array('image_new_fr',  'link_new_fr',  'new',  'fr', 'limit_date_new',  'activate_limit_date'),
      array('image_used',    'link_used',    'used', 'en', 'limit_date_used', 'activate_limit_date_used'),
      array('image_used_fr', 'link_used_fr', 'used', 'fr', 'limit_date_used', 'activate_limit_date_used'),
    );
    $seed = array();
    foreach ($map as $row) {
      list($imgK, $linkK, $cond, $lang, $ldK, $actK) = $row;
      if (empty($legacy[$imgK])) {
        continue;
      }
      $seed[] = $this->sanitize_listing_image_entry(array(
        'image'               => $legacy[$imgK],
        'link'                => isset($legacy[$linkK]) ? $legacy[$linkK] : '',
        'target'              => '_self',
        'insert_after'        => 0,
        'repeat_every'        => $interval, // preserve legacy "repeat every N" behaviour
        'condition'           => $cond,
        'language'            => $lang,
        'fit'                 => 'contain', // preserve the legacy natural (no-crop) look
        'limit_date'          => isset($legacy[$ldK]) ? $legacy[$ldK] : '',
        'activate_limit_date' => isset($legacy[$actK]) ? $legacy[$actK] : 'Disabled',
        'alt'                 => '',
      ));
    }
    return array('entries' => $seed, 'seeded' => !empty($seed));
  }

  // Render one editable table row for an entry at $index.
  private function render_listing_image_row($index, $entry)
  {
    $entry = $this->sanitize_listing_image_entry($entry);
    $n = 'entries[' . $index . ']';

    $condLabels = array('new' => 'New', 'used' => 'Used', 'both' => 'Both');
    $pos = $entry['repeat_every'] > 0
      ? ('every ' . $entry['repeat_every'])
      : ($entry['insert_after'] > 0 ? ('after ' . $entry['insert_after']) : '—');
    $summary = (isset($condLabels[$entry['condition']]) ? $condLabels[$entry['condition']] : 'Both')
      . ' &middot; ' . strtoupper($entry['language']) . ' &middot; pos ' . $pos;
    $thumb = $entry['image']
      ? '<img src="' . esc_url($entry['image']) . '" alt="">'
      : '<div class="lbx-slide-image-ph"><span class="dashicons dashicons-cloud-upload"></span><span>Click to upload</span></div>';

    echo '<div class="lbx-slide lbx-slide--collapsed" data-index="' . esc_attr($index) . '">';
      echo '<div class="lbx-slide-header">';
        echo '<label class="lbx-slide-select"><input type="checkbox" class="select-entry" value="1"></label>';
        echo '<span class="lbx-slide-num">' . ($index + 1) . '</span>';
        echo '<span class="lbx-slide-title">' . $summary . '</span>';
        echo '<div class="lbx-slide-actions">';
          echo '<button type="button" class="li-move-up" title="Move up"><span class="dashicons dashicons-arrow-up-alt2"></span></button>';
          echo '<button type="button" class="li-move-down" title="Move down"><span class="dashicons dashicons-arrow-down-alt2"></span></button>';
          echo '<button type="button" class="li-remove delete-listing-image" data-index="' . esc_attr($index) . '" title="Delete"><span class="dashicons dashicons-trash"></span></button>';
          echo '<span class="lbx-slide-chevron dashicons dashicons-arrow-up-alt2"></span>';
        echo '</div>';
      echo '</div>';

      echo '<div class="lbx-slide-body">';
        echo '<div class="lbx-slide-top-row">';
          echo '<div class="lbx-slide-image-col">';
            echo '<div class="lbx-slide-image lbx-pick-image li-row-preview">' . $thumb . '</div>';
            echo '<input type="hidden" name="' . $n . '[image]" value="' . esc_attr($entry['image']) . '" class="li-image-input">';
          echo '</div>';
          echo '<div class="lbx-slide-fields">';
            echo '<div class="lbx-panel-grid">';
              echo '<div class="lbx-field"><label class="lbx-mini-label">Link</label><input type="text" name="' . $n . '[link]" value="' . esc_attr($entry['link']) . '" class="lbx-input"></div>';
              echo '<div class="lbx-field"><label class="lbx-mini-label">Open in</label>' . $this->listing_image_select_html('', 'target', $entry['target'], $n . '[target]') . '</div>';
              echo '<div class="lbx-field li-position-field"><label class="lbx-mini-label">Insert After</label><input type="number" min="0" name="' . $n . '[insert_after]" value="' . esc_attr($entry['insert_after']) . '" class="lbx-input"></div>';
              echo '<div class="lbx-field li-position-field"><label class="lbx-mini-label">Repeat Every</label><input type="number" min="0" name="' . $n . '[repeat_every]" value="' . esc_attr($entry['repeat_every']) . '" class="lbx-input"></div>';
              echo '<div class="lbx-field"><label class="lbx-mini-label">Condition</label>' . $this->listing_image_select_html('', 'condition', $entry['condition'], $n . '[condition]') . '</div>';
              echo '<div class="lbx-field"><label class="lbx-mini-label">Language</label>' . $this->listing_image_select_html('', 'language', $entry['language'], $n . '[language]') . '</div>';
              echo '<div class="lbx-field"><label class="lbx-mini-label">Image Fit</label>' . $this->listing_image_select_html('', 'fit', $entry['fit'], $n . '[fit]') . '</div>';
              echo '<div class="lbx-field"><label class="lbx-mini-label">Limit Date</label><input type="date" name="' . $n . '[limit_date]" value="' . esc_attr($entry['limit_date']) . '" class="lbx-input"></div>';
              echo '<div class="lbx-field"><label class="lbx-mini-label">Alt Text</label><input type="text" name="' . $n . '[alt]" value="' . esc_attr($entry['alt']) . '" class="lbx-input"></div>';
            echo '</div>';
            echo '<label class="lbx-toggle"><input type="checkbox" name="' . $n . '[activate_limit_date]" value="Enabled" ' . checked($entry['activate_limit_date'], 'Enabled', false) . '><span class="lbx-toggle-track"></span><span class="lbx-toggle-label">Expire on limit date</span></label>';
          echo '</div>';
        echo '</div>';
      echo '</div>';
    echo '</div>';
  }

  // Render the saved-entries table (with seed note when migrated from legacy).
  public function display_listing_images_saved_data()
  {
    $data = $this->get_listing_images_admin();
    $entries = $data['entries'];

    if (empty($entries)) {
      echo '<div class="lbx-empty"><span class="dashicons dashicons-format-image"></span><p>No images configured yet. Add one above.</p></div>';
      return;
    }

    if (!empty($data['seeded'])) {
      echo '<div class="lbx-seed-note"><span class="dashicons dashicons-info-outline"></span> These entries were imported from your previous single-image settings. Click <strong>Save Changes</strong> to store them as the new list.</div>';
    }

    echo '<form id="update-listing-images-form" method="post" action="">';
    echo '<div id="lbx-listing-rows">';
    foreach ($entries as $index => $entry) {
      $this->render_listing_image_row($index, $entry);
    }
    echo '</div>';
    echo '<div class="lbx-listing-actions">';
    echo '<button id="update-listing-images" type="submit" class="lbx-btn lbx-btn-primary"><span class="dashicons dashicons-saved"></span> Save Changes</button>';
    echo '<button id="delete-selected-listing-images" type="button" class="lbx-btn lbx-btn-danger"><span class="dashicons dashicons-trash"></span> Delete Selected</button>';
    echo '</div>';
    echo '</form>';
  }

  public function enqueue_listing_images_scripts($hook)
  {
    // Top-level menu (LBT-1462): the page now lives at its own top-level entry, so
    // the admin hook suffix is `toplevel_page_...` instead of `dealer-settings_page_...`.
    if ($hook !== 'toplevel_page_dealer-settings-listing') {
      return;
    }
    wp_enqueue_media();
    wp_enqueue_script(
      'edit-listing-images-script',
      plugin_dir_url(__FILE__) . 'edit-listing-images.js',
      array('jquery'),
      time(),
      true
    );
    wp_localize_script('edit-listing-images-script', 'editListingImages', array(
      'ajax_url' => admin_url('admin-ajax.php'),
      'nonce'    => wp_create_nonce('save_listing_image_nonce'),
    ));
  }

  // AJAX: append a single new image entry.
  public function save_listing_image()
  {
    check_ajax_referer('save_listing_image_nonce', 'nonce');
    if (!current_user_can('manage_options')) {
      wp_send_json_error('Permission denied');
    }

    $entry = $this->sanitize_listing_image_entry(isset($_POST['entry']) ? (array) $_POST['entry'] : array());
    if (empty($entry['image'])) {
      wp_send_json_error('An image is required.');
    }

    $options = get_option($this->listing_images_option_name(), array());
    if (is_string($options) && $options === '[]') {
      $options = array();
    }
    if (!is_array($options)) {
      $options = array();
    }
    $options[] = $entry;
    update_option($this->listing_images_option_name(), $options);

    wp_send_json_success(array('message' => 'Image added successfully.', 'reload' => true));
  }

  // AJAX: rewrite the whole list from the edited table (order preserved).
  public function update_listing_images()
  {
    check_ajax_referer('save_listing_image_nonce', 'nonce');
    if (!current_user_can('manage_options')) {
      wp_send_json_error('Permission denied');
    }

    $entries = isset($_POST['entries']) ? (array) $_POST['entries'] : array();
    $updated = array();
    foreach ($entries as $entry) {
      $clean = $this->sanitize_listing_image_entry((array) $entry);
      if (empty($clean['image'])) {
        continue; // drop rows with no image
      }
      $updated[] = $clean;
    }

    update_option($this->listing_images_option_name(), array_values($updated));
    wp_send_json_success(array('message' => 'Entries updated successfully.', 'reload' => true));
  }

  // AJAX: delete a single entry by index.
  public function delete_listing_image()
  {
    check_ajax_referer('save_listing_image_nonce', 'nonce');
    if (!current_user_can('manage_options')) {
      wp_send_json_error('Permission denied');
    }

    $index = absint($_POST['index']);
    $options = get_option($this->listing_images_option_name(), array());
    if (is_array($options) && isset($options[$index])) {
      unset($options[$index]);
      update_option($this->listing_images_option_name(), array_values($options));
      wp_send_json_success(array('message' => 'Image deleted successfully.', 'reload' => true));
    }
    wp_send_json_error('Entry not found.');
  }

  // AJAX: delete multiple entries by index.
  public function delete_selected_listing_images()
  {
    check_ajax_referer('save_listing_image_nonce', 'nonce');
    if (!current_user_can('manage_options')) {
      wp_send_json_error('Permission denied');
    }

    if (isset($_POST['entries']) && is_array($_POST['entries'])) {
      $to_delete = array_map('intval', $_POST['entries']);
      $options = get_option($this->listing_images_option_name(), array());
      if (is_array($options)) {
        foreach ($to_delete as $index) {
          if (isset($options[$index])) {
            unset($options[$index]);
          }
        }
        update_option($this->listing_images_option_name(), array_values($options));
      }
      wp_send_json_success(array('message' => 'Selected images deleted successfully.', 'reload' => true));
    }
    wp_send_json_error('No entries selected');
  }

	/**
   * Register and add settings
   */
  public function register_listing_settings(){
    register_setting(
      'dealer-settings-listing-options-group',
      'dealer-settings-listing-options',
      array($this, 'sanitize')
    );

		add_settings_section(
      'listing_new',
      'Inventory Listing Image New',
      array($this, 'print_section_info'),
      'dealer-settings-listing-new'
    );
		add_settings_section(
      'listing_used',
      'Inventory Listing Image used',
      array($this, 'print_section_info'),
      'dealer-settings-listing-used'
    );
		add_settings_section(
      'listing_limits',
      'Inventory Listing options',
      array($this, 'print_section_info'),
      'dealer-settings-listing-limits'
    );

    add_settings_field(
      'image_new',
      'Image New',
      array($this, 'image_new_callback'),
      'dealer-settings-listing-new',
      'listing_new'
    );
    add_settings_field(
      'link_new',
      'Link New',
      array($this, 'link_new_callback'),
      'dealer-settings-listing-new',
      'listing_new'
    );

    // setting image new fr
    add_settings_field(
      'image_new_fr',
      'Image New FR',
      array($this, 'image_new_fr_callback'),
      'dealer-settings-listing-new',
      'listing_new'
    );
    add_settings_field(
      'link_new_fr',
      'Link New FR',
      array($this, 'link_new_fr_callback'),
      'dealer-settings-listing-new',
      'listing_new'
    );

    add_settings_field(
      'insert_after_new',
      'Insert After',
      array($this, 'insert_after_new_callback'),
      'dealer-settings-listing-limits',
      'listing_limits'
    );

		//setting for limit date new
		add_settings_field(
			'limit_date_new',
			'Limit Date',
			array($this, 'limit_date_new_callback'),
			'dealer-settings-listing-new',
      'listing_new'
		);
		//seting for enable limit date
    add_settings_field(
      'activate_limit_date',
      'Use Limit Date',
      array($this, 'activate_limit_date_callback'),
      'dealer-settings-listing-new',
      'listing_new'
    );

    add_settings_field(
      'image_used',
      'Image used',
      array($this, 'image_used_callback'),
      'dealer-settings-listing-used',
      'listing_used'
    );
		//setting for link used
		add_settings_field(
			'link_used',
			'Link used',
			array($this, 'link_used_callback'),
			'dealer-settings-listing-used',
			'listing_used'
		);

    //setting image used fr
    add_settings_field(
      'image_used_fr',
      'Image used FR',
      array($this, 'image_used_fr_callback'),
      'dealer-settings-listing-used',
      'listing_used'
    );
    add_settings_field(
      'link_used_fr',
      'Link used FR',
      array($this, 'link_used_fr_callback'),
      'dealer-settings-listing-used',
      'listing_used'
    );

    //setting for limit date used
    add_settings_field(
      'used_limit_date',
      'Limit Date',
      array($this, 'limit_date_used_callback'),
      'dealer-settings-listing-used',
      'listing_used'
    );
    //seting for enable limit date used
    add_settings_field(
      'activate_limit_date_used',
      'Use Limit Date',
      array($this, 'activate_limit_date_used_callback'),
      'dealer-settings-listing-used',
      'listing_used'
    );
  }

	public function image_new_callback()
	{
		printf(
			'<input type="text" id="image_new" name="dealer-settings-listing-options[image_new]" value="%s" />
				<input id="upload_image_button_inv_new" type="button" class="add-logo-image-button button button-secondary" value="Select image" />',
			isset($this->listing_options['image_new']) ? esc_attr($this->listing_options['image_new']) : ''
		);

		?>

		<?php
	}
	public function link_new_callback()
  {
    printf(
      '<input type="text" id="link_new" name="dealer-settings-listing-options[link_new]" value="%s" />',
      isset($this->listing_options['link_new']) ? esc_attr($this->listing_options['link_new']) : ''
    );
  }

	public function image_new_fr_callback()
	{
		printf(
			'<input type="text" id="image_new_fr" name="dealer-settings-listing-options[image_new_fr]" value="%s" />
				<input id="upload_image_button_inv_new_fr" type="button" class="add-logo-image-button button button-secondary" value="Select image" />',
			isset($this->listing_options['image_new_fr']) ? esc_attr($this->listing_options['image_new_fr']) : ''
		);
	}

	public function link_new_fr_callback()
	{
		printf(
			'<input type="text" id="link_new_fr" name="dealer-settings-listing-options[link_new_fr]" value="%s" />',
			isset($this->listing_options['link_new_fr']) ? esc_attr($this->listing_options['link_new_fr']) : ''
		);
	}

	public function insert_after_new_callback()
  {
    printf(
			'<input type="number" id="insert_after_new" name="dealer-settings-listing-options[insert_after_new]" value="%s" min="0" />',
      isset($this->listing_options['insert_after_new']) ? esc_attr($this->listing_options['insert_after_new']) : ''
    );
  }

	//input for limit date new
	public function limit_date_new_callback()
	{
		$current_date = date('Y-m-d');
		printf(
      '<input type="date" id="limit_date_new" name="dealer-settings-listing-options[limit_date_new]" value="%s" min="%s" />',
			isset($this->listing_options['limit_date_new']) ? esc_attr($this->listing_options['limit_date_new']) : '',
			$current_date
		);
	}

	public function image_used_callback()
	{
		printf(
			'<input type="text" id="image_used" name="dealer-settings-listing-options[image_used]" value="%s" />
			 <input id="upload_image_button_inv_used" type="button" class="add-logo-image-button button button-secondary" value="Select image" />',
			isset($this->listing_options['image_used']) ? esc_attr($this->listing_options['image_used']) : ''
		);
	}

	//input link used callback
	public function link_used_callback()
	{
		printf(
			'<input type="text" id="link_used" name="dealer-settings-listing-options[link_used]" value="%s" />',
			isset($this->listing_options['link_used']) ? esc_attr($this->listing_options['link_used']) : ''
		);
	}

	//image used fr callback
	public function image_used_fr_callback()
	{
		printf(
			'<input type="text" id="image_used_fr" name="dealer-settings-listing-options[image_used_fr]" value="%s" />
			 <input id="upload_image_button_inv_used_fr" type="button" class="add-logo-image-button button button-secondary" value="Select image" />',
			isset($this->listing_options['image_used_fr']) ? esc_attr($this->listing_options['image_used_fr']) : ''
		);
	}

	//input link used callback
	public function link_used_fr_callback()
	{
		printf(
			'<input type="text" id="link_used_fr" name="dealer-settings-listing-options[link_used_fr]" value="%s" />',
			isset($this->listing_options['link_used_fr']) ? esc_attr($this->listing_options['link_used_fr']) : ''
		);
	}
  //input for limit date used
  public function limit_date_used_callback()
  {
    $current_date = date('Y-m-d');
    printf(
      '<input type="date" id="limit_date_used" name="dealer-settings-listing-options[limit_date_used]" value="%s" min="%s" />',
      isset($this->listing_options['limit_date_used']) ? esc_attr($this->listing_options['limit_date_used']) : '',
      $current_date
    );
  }

	//type check input for enable limit date
	public function activate_limit_date_callback()
	{
		if (!isset($this->listing_options['activate_limit_date'])) {
			$this->listing_options['activate_limit_date'] = "Disabled";
		}

		echo '<select id="activate_limit_date" name="dealer-settings-listing-options[activate_limit_date]">';
		if (strtolower($this->listing_options['activate_limit_date']) == 'enabled') {
			echo '<option value="Disabled">Disabled</option>';
			echo '<option selected value="Enabled">Enabled</option>';
		} else if (strtolower($this->listing_options['activate_limit_date']) == 'disabled') {
			echo '<option value="Disabled">Disabled</option>';
			echo '<option value="Enabled">Enabled</option>';
		} else {
			echo '<option value="Disabled">Disabled</option>';
			echo '<option value="Enabled">Enabled</option>';
		}

		echo '</select>';
    echo '<p class="description-l">Enable or disable the limit date for the new inventory listing</p>';
	}

  //type check input for enable limit date used
  public function activate_limit_date_used_callback()
  {
    if (!isset($this->listing_options['activate_limit_date_used'])) {
      $this->listing_options['activate_limit_date_used'] = "Disabled";
    }

    echo '<select id="activate_limit_date_used" name="dealer-settings-listing-options[activate_limit_date_used]">';
    if (strtolower($this->listing_options['activate_limit_date_used']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->listing_options['activate_limit_date_used']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
    echo '<p class="description-l">Enable or disable the limit date for the used inventory listing</p>';
  }


	/**
   * Options page callback
   */
	//*Used finance custom page
    /**
   * Options page callback
   */
	public function create_used_finance_custom_page(){
    // Set class property
    $this->used_finance_custom_options = get_option('dealer-settings-used-finance-custom-options', array());
    ?>
    <div class="wrap">
		<div class="card">
    	<form method="post" action="options.php">
			<?php
				settings_fields('dealer-settings-used-finance-custom-options-group');
				do_settings_sections('used-finance-custom');
				?>
    	  <div id="response-message"></div>
    	  <input id="save-options" name="save-options" class="button button-primary" type="button" value="Save Finance">
    	  <div id="options-container" class="card-msg"></div>
    	</form>
		</div>
			<div>
				<br>
				<?php $this->display_saved_data(); ?>
			</div>
    </div>

	<style>
    .card {
        border: 1px solid #ccd0d4;
        border-radius: 6px;
        background-color: #ffffff;
        box-shadow: 0 1px 1px rgba(0,0,0,0.04);
        margin: 20px 0;
        padding: 20px;
    }
    .card-msg {
				text-align: center;
				text-transform: capitalize;
				align-self: center;
    }
    .msg {
			border: 1px solid #ccd0d4;
      border-radius: 6px;
      background-color: #508D4E;
      box-shadow: 0 1px 1px rgba(0,0,0,0.04);
      margin: 20px 0;
			color: #ffffff;
      padding: 10px;
			animation: fadeIn 1s;
    }
    .msg-er {
			border: 1px solid #ccd0d4;
      border-radius: 6px;
      background-color: #c60000;
      box-shadow: 0 1px 1px rgba(0,0,0,0.04);
      margin: 20px 0;
			color: #ffffff;
      padding: 10px;
			animation: fadeIn 1s;
    }
		@keyframes fadeIn {
  		0% { opacity: 0; }
  		100% { opacity: 1; }
		}

		.delete-selected-button {
    	background-color: #d9534f !important; /* Rojo */
    	border-color: #d43f3a !important; /* Rojo oscuro */
    	color: white !important;
		}

		.delete-selected-button:hover {
			background-color: #c9302c !important; /* Rojo más oscuro */
			border-color: #ac2925 !important; /* Rojo oscuro */
		}
		.table-responsive {
			overflow-x: auto;
		}

		.form-control {
			width: 100%;
			padding: 10px;
			margin: 10px;
			box-sizing: border-box;
		}

		.btn-sm {
			padding: 5px 10px;
			font-size: 12px;
		}

		.btn-block {
			width: 100%;
			display: block;
			margin: 10px 0;
		}

		.wp-list-table td {
			padding: 10px;
		}

		.wp-list-table {
			margin: 20px 0;
		}
		.widefat td{
			vertical-align: middle;
		}
		.action-th {
			width: 70px;
			text-align: center !important;
		}
		@media screen and (max-width: 769px) {
				.action-th {
				width: auto;
			}
		}
		.centrar-checkbox {
			text-align: center;
		}
</style>
  <?php
}

public function enqueue_used_finance_scripts($hook) {
  // Verificar si estamos en la página de opciones de nuestro plugin
  if ($hook !== 'dealer-settings_page_dealer-settings-used_finance_custom' && $hook !== 'dealer-settings_page_dealer-settings-web-info') {
    return;
  }

  wp_enqueue_script(
    'edit-used-finance-script',
    plugin_dir_url(__FILE__) . 'edit-used-finance.js',
    array('jquery'),
    time(), // Utilizando el timestamp actual para evitar caché
    true
  );

  // Localizar script para pasar variables de PHP a JavaScript
  wp_localize_script(
    'edit-used-finance-script',
    'editUsedFinance',
    array(
      'ajax_url' => admin_url('admin-ajax.php'),
      'nonce'    => wp_create_nonce('save_custom_finance_options_nonce')
    )
  );
}
//* save function

public function save_custom_finance_options() {

    // Verificar el nonce para la seguridad
    check_ajax_referer('save_custom_finance_options_nonce', 'nonce');

    // Verificar permisos del usuario
    if (!current_user_can('manage_options')) {
      wp_send_json_error('Permission denied');
    }

    // Obtener los datos del POST
    $option1 = sanitize_text_field($_POST['option1']);
    $option2 = absint($_POST['option2']);
    $option3 = absint($_POST['option3']);
    $option4 = absint($_POST['option4']);
    $option5 = floatval($_POST['option5']);
    $option6 = isset($_POST['option6']) ? filter_var($_POST['option6'], FILTER_VALIDATE_BOOLEAN) : false; // Asegurar que es booleano

    // Obtener la opción existente
    $options = get_option('dealer-settings-used-finance-custom-options', array());

    // Verificar si la opción es una cadena que representa un array vacío
    if (is_string($options) && $options === '[]') {
      $options = array();
    }

    // Agregar las nuevas opciones al array
    $options[] = array('models' => $option1, 'startyear' => $option2,
                       'endyear' => $option3, 'term' => $option4,
                       'value' => $option5, 'isCPO' => $option6);

    // Actualizar la opción en la base de datos
    update_option('dealer-settings-used-finance-custom-options', $options);

    wp_send_json_success(array(
        'message' => 'Options saved successfully.',
        'reload' => true
    ));
  }
//* update function

	public function update_custom_finance_options() {
    check_ajax_referer('save_custom_finance_options_nonce', 'nonce');

    if (!current_user_can('manage_options')) {
        wp_send_json_error('Permission denied');
    }

    // Ahora entries es un array asociativo multidimensional
    $entries = isset($_POST['entries']) ? $_POST['entries'] : array();

    $updated_options = array();

    foreach ($entries as $entry) {
        $model = isset($entry['models']) ? sanitize_text_field($entry['models']) : '';
        $startYear = isset($entry['startyear']) ? absint($entry['startyear']) : 0;
        $endYear = isset($entry['endyear']) ? absint($entry['endyear']) : 0;
        $term = isset($entry['term']) ? absint($entry['term']) : 0;
        $value = isset($entry['value']) ? floatval($entry['value']) : 0;
        $cpo = isset($entry['isCPO']) ? filter_var($entry['isCPO'], FILTER_VALIDATE_BOOLEAN) : false;

        $updated_options[] = array(
            'models' => $model,
            'startyear' => $startYear,
            'endyear' => $endYear,
            'term' => $term,
            'value' => $value,
            'isCPO' => $cpo
        );
    }

    update_option('dealer-settings-used-finance-custom-options', $updated_options);

    wp_send_json_success(array(
        'message' => 'Entries updated successfully.',
				'reload' => true
    ));
}

//* delete function

	public function delete_finance_entry() {
		check_ajax_referer('save_custom_finance_options_nonce', 'nonce');

		if (!current_user_can('manage_options')) {
				wp_send_json_error('Permission denied');
		}

		$index = absint($_POST['index']);
		$options = get_option('dealer-settings-used-finance-custom-options', array());

		if (isset($options[$index])) {
			unset($options[$index]);
			$options = array_values($options); // Reindex array
			update_option('dealer-settings-used-finance-custom-options', $options);

			wp_send_json_success(array(
					'message' => 'Entry deleted successfully.',
					'reload' => true
			));
			} else {
					wp_send_json_error('Entry not found.');
			}
	}

	function delete_selected_entries() {
    check_ajax_referer('save_custom_finance_options_nonce', 'nonce');

    if (!current_user_can('manage_options')) {
        wp_send_json_error('Permission denied');
    }

    if (isset($_POST['entries']) && is_array($_POST['entries'])) {
        $entries_to_delete = array_map('intval', $_POST['entries']);
        $options = get_option('dealer-settings-used-finance-custom-options', array());

        foreach ($entries_to_delete as $index) {
            if (isset($options[$index])) {
                unset($options[$index]);
            }
        }

        // Re-index the array to remove gaps
        $options = array_values($options);
        update_option('dealer-settings-used-finance-custom-options', $options);

        wp_send_json_success(array(
            'message' => 'Selected entries deleted successfully.',
            'reload' => true
        ));
    } else {
        wp_send_json_error('No entries selected');
    }
}

  /**
   * Register and add settings
   */
  public function register_used_finance_custom_settings()
  {
    register_setting(
      'dealer-settings-used-finance-custom-options-group',
      'dealer-settings-used-finance-custom-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'custom_finance_used_setting',
      'Custom Financing',
      array($this, 'print_section_info'),
      'used-finance-custom'
    );

    add_settings_field(
      'model',
      'Models',
      array($this, 'model_callback'),
      'used-finance-custom',
      'custom_finance_used_setting'
    );
    add_settings_field(
      'start_year',
      'Start Year',
      array($this, 'start_year_callback'),
      'used-finance-custom',
      'custom_finance_used_setting'
    );
    add_settings_field(
      'end_year',
      'End Year',
      array($this, 'end_year_callback'),
      'used-finance-custom',
      'custom_finance_used_setting'
    );
    add_settings_field(
      'term',
      'Term',
      array($this, 'term_callback'),
      'used-finance-custom',
      'custom_finance_used_setting'
    );
    add_settings_field(
      'value',
      'Value',
      array($this, 'value_callback'),
      'used-finance-custom',
      'custom_finance_used_setting'
    );
    add_settings_field(
      'iscpo',
      'Is CPO',
      array($this, 'iscpo_callback'),
      'used-finance-custom',
      'custom_finance_used_setting'
    );
  }

	public function model_callback(){
    printf('<input type="text" id="model" required name="dealer-settings-used-finance-custom-options[model]" />');
	}

	public function start_year_callback(){
    printf('<input type="number" id="start_year" min=0 required name="dealer-settings-used-finance-custom-options[start_year]" />');
	}

	public function end_year_callback(){
    printf('<input type="number" id="end_year" min=0 required name="dealer-settings-used-finance-custom-options[end_year]" />');
	}

	public function term_callback(){
    printf('<input type="number" id="term" min=0 required name="dealer-settings-used-finance-custom-options[term]" />');
	}

	public function value_callback(){
		printf('<input type="number" id="value" max=50 step=0.01 min=0 required name="dealer-settings-used-finance-custom-options[value]" />');
	}

	public function iscpo_callback(){
    printf('<input type="checkbox" id="iscpo" name="dealer-settings-used-finance-custom-options[iscpo]" />');
	}

public function display_saved_data() {
  $options = get_option('dealer-settings-used-finance-custom-options', array());

  	if (is_array($options) &&!empty($options)) {

      echo '<form id="update-entries-form" method="post" action="">';
      echo '<div class="table-responsive">';

      echo '<table class="fixed wp-list-table widefat striped">';
      echo '<thead><tr>';
			echo '<th style="width: 40px;">Select</th>'; // New checkbox column
      echo '<th>Model</th>';
      echo '<th>Start Year</th>';
      echo '<th>End Year</th>';
      echo '<th>Term</th>';
      echo '<th>Value</th>';
      echo '<th class="action-th">Is CPO</th>';
      echo '<th class="action-th">Actions</th>';
      echo '</tr></thead>';
      echo '<tbody>';

      foreach ($options as $index => $entry) {
        echo '<tr>';
				echo '<td><input type="checkbox" class="select-entry" name="entries[' . $index . '][delete]" value="1"></td>'; // New checkbox for selection
        echo '<td><input type="text" name="entries['. $index. '][models]" value="'. esc_attr($entry['models']). '" class="form-control"></td>';
        echo '<td><input type="number" min=0 name="entries['. $index. '][startyear]" value="'. esc_attr($entry['startyear']). '" class="form-control"></td>';
        echo '<td><input type="number" min=0 name="entries['. $index. '][endyear]" value="'. esc_attr($entry['endyear']). '" class="form-control"></td>';
        echo '<td><input type="number" min=0 name="entries['. $index. '][term]" value="'. esc_attr($entry['term']). '" class="form-control"></td>';
        echo '<td><input type="number" max=50 step=0.01 min=0 name="entries['. $index. '][value]" value="'. esc_attr($entry['value']). '" class="form-control"></td>';
        echo '<td class="centrar-checkbox"><input type="checkbox" name="entries['. $index. '][isCPO]" value="1" '. checked($entry['isCPO'], true, false).'></td>';
        echo '<td class="centrar-checkbox"><button type="button" class="delete-entry button btn-sm" data-index="'. $index. '">Delete</button></td>';
        echo '</tr>';

      }
      echo '</tbody></table>';
      echo '</div>'; // Close table-responsive div
      echo '</br>';
      echo '<input id="update-entries" style="margin-right: 1em;" type="submit" class="button button-primary" value="Update Entries">';
			echo '<button id="delete-selected" type="button" class="button delete-selected-button">Delete Selected</button>';
      echo '</form>';
  } else {
      echo '<h4 class="card">No data available. Please add some entries.</h4>';
  }
}


  /**
   * Options page callback
   */
  public function create_contact_page()
  {
    // Set class property
    $this->contact_options = get_option('dealer-settings-contact-options');
    ?>
            <div class="wrap">
              <h1>Contact</h1>
              <form method="post" action="options.php">
                <?php

                settings_fields('dealer-settings-contact-options-group');
                do_settings_sections('dealer-settings-contact');
                do_settings_sections('dealer-settings-emails');
                do_settings_sections('dealer-settings-address');
                submit_button();

                ?>
              </form>
            </div>
          <?php
  }

  /**
   * Register and add settings
   */
  public function register_contact_settings(){
    register_setting(
      'dealer-settings-contact-options-group',
      'dealer-settings-contact-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'contact',
      'Contact',
      array($this, 'print_section_info'),
      'dealer-settings-contact'
    );

    add_settings_section(
      'emails',
      'Emails',
      array($this, 'print_section_info'),
      'dealer-settings-emails'
    );

    add_settings_section(
      'address',
      'Address',
      array($this, 'print_section_info'),
      'dealer-settings-address'
    );

    add_settings_field(
      'dealer_name',
      'Dealer Name',
      array($this, 'dealer_name_callback'),
      'dealer-settings-contact',
      'contact'
    );

    add_settings_field(
      'dealer_url',
      'Dealer URL',
      array($this, 'dealer_url_callback'),
      'dealer-settings-contact',
      'contact'
    );

    add_settings_field(
      'sale_phone',
      'Sales Phone',
      array($this, 'sale_phone_callback'),
      'dealer-settings-contact',
      'contact'
    );

    add_settings_field(
      'service_phone',
      'Service Phone',
      array($this, 'service_phone_callback'),
      'dealer-settings-contact',
      'contact'
    );

    add_settings_field(
      'parts_phone',
      'Parts Phone',
      array($this, 'parts_phone_callback'),
      'dealer-settings-contact',
      'contact'
    );

    add_settings_field(
      'collision_phone',
      'Collision Phone',
      array($this, 'collision_phone_callback'),
      'dealer-settings-contact',
      'contact'
    );

    add_settings_field(
      'accessories_phone',
      'Accessories Phone',
      array($this, 'accessories_phone_callback'),
      'dealer-settings-contact',
      'contact'
    );

    add_settings_field(
      'fax',
      'Fax',
      array($this, 'fax_callback'),
      'dealer-settings-contact',
      'contact'
    );

    add_settings_field(
      'body_shop',
      'Body Shop',
      array($this, 'body_shop_callback'),
      'dealer-settings-contact',
      'contact'
    );

    add_settings_field(
      'sms',
      'SMS',
      array($this, 'sms_callback'),
      'dealer-settings-contact',
      'contact'
    );

    add_settings_field(
      'primary_email',
      'Primary Email',
      array($this, 'primary_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'secondary_email',
      'Secondary Email',
      array($this, 'secondary_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'sales-email',
      'Sales Email',
      array($this, 'sales_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'service-email',
      'Service Email',
      array($this, 'service_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'parts-email',
      'Parts Email',
      array($this, 'parts_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'accessories-email',
      'Accessories Email',
      array($this, 'accessories_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'collision-email',
      'Collision Email',
      array($this, 'collision_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'bodyshop-email',
      'Body Shop Email',
      array($this, 'bodyshop_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'additional1-email',
      'Additional Email #1',
      array($this, 'additional1_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'additional2-email',
      'Additional Email #2',
      array($this, 'additional2_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'additional3-email',
      'Additional Email #3',
      array($this, 'additional3_email_callback'),
      'dealer-settings-emails',
      'emails'
    );

    add_settings_field(
      'line-1',
      'Line 1',
      array($this, 'line_1_callback'),
      'dealer-settings-address',
      'address'
    );

    add_settings_field(
      'line-2',
      'Line 2',
      array($this, 'line_2_callback'),
      'dealer-settings-address',
      'address'
    );

    add_settings_field(
      'city',
      'City',
      array($this, 'city_callback'),
      'dealer-settings-address',
      'address'
    );

    add_settings_field(
      'province',
      'Province',
      array($this, 'province_callback'),
      'dealer-settings-address',
      'address'
    );

    add_settings_field(
      'postal_code',
      'Postal Code',
      array($this, 'postal_code_callback'),
      'dealer-settings-address',
      'address'
    );

    add_settings_field(
      'url_map',
      'Url Map',
      array($this, 'map_callback'),
      'dealer-settings-address',
      'address'
    );
    add_settings_field(
      'url_map_iframe',
      'Iframe Map(URL only)',
      array($this, 'map_iframe_callback'),
      'dealer-settings-address',
      'address'
    );

    add_settings_field(
      'timezone',
      'Time Zone',
      array($this, 'timezone_callback'),
      'dealer-settings-address',
      'address'
    );
  }

  public function dealer_name_callback()
  {
    printf(
      '<input type="text" id="dealer_name" name="dealer-settings-contact-options[dealer_name]" value="%s" />',
      isset($this->contact_options['dealer_name']) ? esc_attr($this->contact_options['dealer_name']) : ''
    );
  }

  public function dealer_url_callback()
  {
    printf(
      '<input type="text" id="dealer_url" name="dealer-settings-contact-options[dealer_url]" value="%s" />',
      isset($this->contact_options['dealer_url']) ? esc_attr($this->contact_options['dealer_url']) : ''
    );
  }

  public function sale_phone_callback()
  {
    printf(
      '<input type="tel" id="sale_phone" name="dealer-settings-contact-options[sale_phone]" value="%s" pattern="^[+]?[0-9]{9,12}$" />',
      isset($this->contact_options['sale_phone']) ? esc_attr($this->contact_options['sale_phone']) : ''
    );
  }

  public function fax_callback()
  {
    printf(
      '<input type="tel" id="fax" name="dealer-settings-contact-options[fax]" value="%s" pattern="^[+]?[0-9]{9,12}$" />',
      isset($this->contact_options['fax']) ? esc_attr($this->contact_options['fax']) : ''
    );
  }

  public function sms_callback()
  {
    printf(
      '<input type="tel" id="sms" name="dealer-settings-contact-options[sms]" value="%s" pattern="^[+]?[0-9]{9,12}$" />',
      isset($this->contact_options['sms']) ? esc_attr($this->contact_options['sms']) : ''
    );
  }

  public function body_shop_callback()
  {
    printf(
      '<input type="tel" id="body_shop" name="dealer-settings-contact-options[body_shop]" value="%s" pattern="^[+]?[0-9]{9,12}$" />',
      isset($this->contact_options['body_shop']) ? esc_attr($this->contact_options['body_shop']) : ''
    );
  }

  public function service_phone_callback()
  {
    printf(
      '<input type="tel" id="service_phone" name="dealer-settings-contact-options[service_phone]" value="%s" pattern="^[+]?[0-9]{9,12}$" />',
      isset($this->contact_options['service_phone']) ? esc_attr($this->contact_options['service_phone']) : ''
    );
  }
  public function parts_phone_callback()
  {
    printf(
      '<input type="tel" id="parts_phone" name="dealer-settings-contact-options[parts_phone]" value="%s" pattern="^[+]?[0-9]{9,12}$" />',
      isset($this->contact_options['parts_phone']) ? esc_attr($this->contact_options['parts_phone']) : ''
    );
  }

  public function collision_phone_callback()
  {
    printf(
      '<input type="tel" id="collision_phone" name="dealer-settings-contact-options[collision_phone]" value="%s" pattern="^[+]?[0-9]{9,12}$" />',
      isset($this->contact_options['collision_phone']) ? esc_attr($this->contact_options['collision_phone']) : ''
    );
  }

  public function accessories_phone_callback()
  {
    printf(
      '<input type="tel" id="accessories_phone" name="dealer-settings-contact-options[accessories_phone]" value="%s" pattern="^[+]?[0-9]{9,12}$" />',
      isset($this->contact_options['accessories_phone']) ? esc_attr($this->contact_options['accessories_phone']) : ''
    );
  }
  public function primary_email_callback()
  {
    printf(
      '<input type="email" id="primary_email" name="dealer-settings-contact-options[primary_email]" value="%s" />',
      isset($this->contact_options['primary_email']) ? esc_attr($this->contact_options['primary_email']) : ''
    );
  }
  public function secondary_email_callback()
  {
    printf(
      '<input type="email" id="secondary_email" name="dealer-settings-contact-options[secondary_email]" value="%s" />',
      isset($this->contact_options['secondary_email']) ? esc_attr($this->contact_options['secondary_email']) : ''
    );
  }

  public function sales_email_callback()
  {
    printf(
      '<input type="email" id="sales_email" name="dealer-settings-contact-options[sales_email]" value="%s" />',
      isset($this->contact_options['sales_email']) ? esc_attr($this->contact_options['sales_email']) : ''
    );
  }

  public function service_email_callback()
  {
    printf(
      '<input type="email" id="service_email" name="dealer-settings-contact-options[service_email]" value="%s" />',
      isset($this->contact_options['service_email']) ? esc_attr($this->contact_options['service_email']) : ''
    );
  }

  public function parts_email_callback()
  {
    printf(
      '<input type="email" id="parts_email" name="dealer-settings-contact-options[parts_email]" value="%s" />',
      isset($this->contact_options['parts_email']) ? esc_attr($this->contact_options['parts_email']) : ''
    );
  }

  public function accessories_email_callback()
  {
    printf(
      '<input type="email" id="accessories_email" name="dealer-settings-contact-options[accessories_email]" value="%s" />',
      isset($this->contact_options['accessories_email']) ? esc_attr($this->contact_options['accessories_email']) : ''
    );
  }

  public function collision_email_callback()
  {
    printf(
      '<input type="email" id="collision_email" name="dealer-settings-contact-options[collision_email]" value="%s" />',
      isset($this->contact_options['collision_email']) ? esc_attr($this->contact_options['collision_email']) : ''
    );
  }

  public function bodyshop_email_callback()
  {
    printf(
      '<input type="email" id="bodyshop_email" name="dealer-settings-contact-options[bodyshop_email]" value="%s" />',
      isset($this->contact_options['bodyshop_email']) ? esc_attr($this->contact_options['bodyshop_email']) : ''
    );
  }

  public function additional1_email_callback()
  {
    printf(
      '<input type="email" id="additional1_email" name="dealer-settings-contact-options[additional1_email]" value="%s" />',
      isset($this->contact_options['additional1_email']) ? esc_attr($this->contact_options['additional1_email']) : ''
    );
  }

  public function additional2_email_callback()
  {
    printf(
      '<input type="email" id="additional2_email" name="dealer-settings-contact-options[additional2_email]" value="%s" />',
      isset($this->contact_options['additional2_email']) ? esc_attr($this->contact_options['additional2_email']) : ''
    );
  }

  public function additional3_email_callback()
  {
    printf(
      '<input type="email" id="additional3_email" name="dealer-settings-contact-options[additional3_email]" value="%s" />',
      isset($this->contact_options['additional3_email']) ? esc_attr($this->contact_options['additional3_email']) : ''
    );
  }

  public function line_1_callback()
  {
    printf(
      '<input type="text" id="address_line_1" name="dealer-settings-contact-options[address_line_1]" value="%s" />',
      isset($this->contact_options['address_line_1']) ? esc_attr($this->contact_options['address_line_1']) : ''
    );
  }

  public function line_2_callback()
  {
    printf(
      '<input type="text" id="address_line_2" name="dealer-settings-contact-options[address_line_2]" value="%s" />',
      isset($this->contact_options['address_line_2']) ? esc_attr($this->contact_options['address_line_2']) : ''
    );
  }

  public function city_callback()
  {
    printf(
      '<input type="text" id="address_city" name="dealer-settings-contact-options[address_city]" value="%s" />',
      isset($this->contact_options['address_city']) ? esc_attr($this->contact_options['address_city']) : ''
    );
  }

  public function province_callback()
  {
    $provinces_options = '';

    foreach ($this->provinces_options as $province) {
      $provinces_options .= '<option '. (isset($this->contact_options['address_province']) && strtolower(str_replace(' ', '', $this->contact_options['address_province'])) == strtolower(str_replace(' ', '', $province)) ? ' selected '  : '').' value="' . $province . '">' . $province . '</option>';
    }

    printf(
      '<select id="address_province" name="dealer-settings-contact-options[address_province]">
        %s
      </select>',
      $provinces_options
    );
  }

  public function postal_code_callback()
  {
    printf(
      '<input type="text" id="address_postal_code" name="dealer-settings-contact-options[address_postal_code]" value="%s" />',
      isset($this->contact_options['address_postal_code']) ? esc_attr($this->contact_options['address_postal_code']) : ''
    );
  }

  public function map_callback()
  {
    printf(
      '<input type="text" id="address_url_map" name="dealer-settings-contact-options[address_url_map]" value="%s" />',
      isset($this->contact_options['address_url_map']) ? esc_attr($this->contact_options['address_url_map']) : ''
    );
  }
  public function map_iframe_callback()
  {
    printf(
      '<input type="text" id="address_url_map_iframe" name="dealer-settings-contact-options[address_url_map_iframe]" value="%s" />',
      isset($this->contact_options['address_url_map_iframe']) ? esc_attr($this->contact_options['address_url_map_iframe']) : ''
    );
  }

  public function timezone_callback()
  {
    printf(
      '<input type="text" id="address_timezone" name="dealer-settings-contact-options[address_timezone]" value="%s" />',
      isset($this->contact_options['address_timezone']) ? esc_attr($this->contact_options['address_timezone']) : ''
    );
  }



  /**
   * Options page callback
   */
  public function create_iboost_page()
  {
    // Set class property
    $this->iboost_options = get_option('dealer-settings-iboost-options');
    ?>
            <div class="wrap">
              <h1>iBoost 360</h1>
              <form method="post" action="options.php">
                <?php

                settings_fields('dealer-settings-iboost-options-group');
                do_settings_sections('dealer-settings-iboost');
                submit_button();

                ?>
              </form>
            </div>
          <?php
  }

  /**
   * Options page callback
   */
  public function create_disclaimer_page()
  {
    // Set class property
    $this->disclaimer_options = get_option('dealer-settings-disclaimer-options');
    ?>
            <div class="wrap">
              <h1>Disclaimer</h1>
              <form method="post" action="options.php">
                <?php

                settings_fields('dealer-settings-disclaimer-options-group');
                do_settings_sections('dealer-settings-disclaimer');
                submit_button();

                ?>
              </form>
            </div>
          <?php
  }

  public function create_filter_page()
  {
    // Set class property
    $this->filter_options = get_option('dealer-settings-filter-options');
    ?>
            <div class="wrap">
              <h1>Filter</h1>
              <form method="post" action="options.php">
                <?php

                settings_fields('dealer-settings-filter-options-group');
                do_settings_sections('dealer-settings-filter');
                submit_button();

                ?>
              </form>
            </div>
          <?php
  }


  /**
   * Options page callback
   */
  public function create_policies_page()
  {
    // Set class property
    $this->policies_options = get_option('dealer-settings-policies-options');
    ?>
            <div class="wrap">
              <h1>Policies</h1>
              <form method="post" action="options.php">
                <?php

                settings_fields('dealer-settings-policies-options-group');
                do_settings_sections('dealer-settings-policies');
                submit_button();

                ?>
              </form>
            </div>
          <?php
  }


  /**
   * Options page callback
   */
  public function create_socialmedia_page()
  {
    // Set class property
    $this->socialmedia_options = get_option('dealer-settings-socialmedia-options');
    ?>
            <div class="wrap">
              <h1>Social Media</h1>
              <form method="post" action="options.php">
                <?php

                settings_fields('dealer-settings-socialmedia-options-group');
                do_settings_sections('dealer-settings-socialmedia');
                submit_button();

                ?>
              </form>
            </div>
        <?php
  }

  /**
   * Register and add settings
   */
  public function register_socialmedia_settings()
  {
    register_setting(
      'dealer-settings-socialmedia-options-group',
      'dealer-settings-socialmedia-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'socialmedia',
      'Social Media',
      array($this, 'print_section_info'),
      'dealer-settings-socialmedia'
    );

    add_settings_field(
      'facebook_socialmedia',
      'Facebook',
      array($this, 'facebook_socialmedia_callback'),
      'dealer-settings-socialmedia',
      'socialmedia'
    );

    add_settings_field(
      'twitter_socialmedia',
      'X (Twitter)',
      array($this, 'twitter_socialmedia_callback'),
      'dealer-settings-socialmedia',
      'socialmedia'
    );

    add_settings_field(
      'instagram_socialmedia',
      'Instagram',
      array($this, 'instagram_socialmedia_callback'),
      'dealer-settings-socialmedia',
      'socialmedia'
    );

    add_settings_field(
      'pinterest_socialmedia',
      'Pinterest',
      array($this, 'pinterest_socialmedia_callback'),
      'dealer-settings-socialmedia',
      'socialmedia'
    );

    add_settings_field(
      'youtube_socialmedia',
      'Youtube',
      array($this, 'youtube_socialmedia_callback'),
      'dealer-settings-socialmedia',
      'socialmedia'
    );

    add_settings_field(
      'linkedin_socialmedia',
      'Linkedin',
      array($this, 'linkedin_socialmedia_callback'),
      'dealer-settings-socialmedia',
      'socialmedia'
    );

    add_settings_field(
      'tiktok_socialmedia',
      'TikTok',
      array($this, 'tiktok_socialmedia_callback'),
      'dealer-settings-socialmedia',
      'socialmedia'
    );
  }

  public function register_policies_settings()
  {
    register_setting(
      'dealer-settings-policies-options-group',
      'dealer-settings-policies-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'policies',
      'Policies',
      array($this, 'print_section_info'),
      'dealer-settings-policies'
    );

    add_settings_field(
      'terms_and_conditions_url',
      'Terms and Conditions URL',
      array($this, 'terms_and_conditions_url_callback'),
      'dealer-settings-policies',
      'policies'
    );

    add_settings_field(
      'privacy_policy_url',
      'Privacy Policy URL',
      array($this, 'privacy_policy_url_callback'),
      'dealer-settings-policies',
      'policies'
    );

    add_settings_field(
      'terms_and_conditions_url_fr',
      'Terms and Conditions (FR)',
      array($this, 'terms_and_conditions_url_fr_callback'),
      'dealer-settings-policies',
      'policies'
    );

    add_settings_field(
      'privacy_policy_url_fr',
      'Privacy Policy (FR)',
      array($this, 'privacy_policy_url_fr_callback'),
      'dealer-settings-policies',
      'policies'
    );
  }
  /**
   * Register and add settings
   */
  public function register_disclaimer_settings()
  {
    register_setting(
      'dealer-settings-disclaimer-options-group',
      'dealer-settings-disclaimer-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'disclaimer',
      'Disclaimer',
      array($this, 'print_section_info'),
      'dealer-settings-disclaimer'
    );
    add_settings_field(
      'disclaimer_new',
      'New',
      array($this, 'disclaimer_new_callback'),
      'dealer-settings-disclaimer',
      'disclaimer'
    );
    add_settings_field(
      'disclaimer_new_fr',
      'New FR',
      array($this, 'disclaimer_new_callback_fr'),
      'dealer-settings-disclaimer',
      'disclaimer'
    );
    add_settings_field(
      'disclaimer_used',
      'Used',
      array($this, 'disclaimer_used_callback'),
      'dealer-settings-disclaimer',
      'disclaimer'
    );
    add_settings_field(
      'disclaimer_used_fr',
      'Used FR',
      array($this, 'disclaimer_used_callback_fr'),
      'dealer-settings-disclaimer',
      'disclaimer'
    );
  }

  public function register_filter_settings()
  {
    register_setting(
      'dealer-settings-filter-options-group',
      'dealer-settings-filter-options',
      array($this, 'sanitize')
    );
    add_settings_section(
      'filter',
      'Filter',
      array($this, 'print_section_info'),
      'dealer-settings-filter'
    );

		add_settings_field(
      'filter_min_number',
      'Limit Result Value',
      array($this, 'filter_min_result_number'),
      'dealer-settings-filter',
      'filter'
    );

    add_settings_field(
      'filter_zero_result',
      'Zero Result Message',
      array($this, 'filter_zero_result_message'),
      'dealer-settings-filter',
      'filter'
    );
    add_settings_field(
      'filter_min_result',
      'Limited Result Message',
      array($this, 'filter_min_result_message'),
      'dealer-settings-filter',
      'filter'
    );

    add_settings_field(
      'filter_zero_result_fr',
      'Zero Result Message Fr',
      array($this, 'filter_zero_result_message_fr'),
      'dealer-settings-filter',
      'filter'
    );
    add_settings_field(
      'filter_min_result_fr',
      'Limited Result Message Fr',
      array($this, 'filter_min_result_message_fr'),
      'dealer-settings-filter',
      'filter'
    );
  }

  public function register_iboost_settings()
  {
    register_setting(
      'dealer-settings-iboost-options-group',
      'dealer-settings-iboost-options',
      array($this, 'sanitize')
    );

    add_settings_section(
      'iboost',
      'iBoost 360',
      array($this, 'print_section_info'),
      'dealer-settings-iboost'
    );
    add_settings_field(
      'iboost_token',
      'Token',
      array($this, 'iboost_token_callback'),
      'dealer-settings-iboost',
      'iboost'
    );
  }

  public function iboost_option_callback()
  {
    if (!isset($this->leadbox_settings['iboost'])) {
      $this->leadbox_settings['iboost'] = "Disabled";
    }

    echo '<select id="iboost" name="leadbox-settings[iboost]">';
    if (strtolower($this->leadbox_settings['iboost']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else if (strtolower($this->leadbox_settings['iboost']) == 'disabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    } else {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }

    echo '</select>';
  }

  public function iboost_token_callback()
  {
    printf(
      '<input type="text" id="iboost_token" name="leadbox-settings[iboost_token]" value="%s" />',
      isset($this->leadbox_settings['iboost_token']) ? esc_attr($this->leadbox_settings['iboost_token']) : ''
    );
  }

  public function live_data_option_callback()
  {
    printf(
      '<input type="text" id="additional_info_live_data" name="leadbox-settings[additional_info_live_data]" value="%s" />',
      isset($this->leadbox_settings['additional_info_live_data']) ? esc_attr($this->leadbox_settings['additional_info_live_data']) : ''
    );
  }

  public function billing_id_option_callback()
  {
    printf(
      '<input type="text" id="additional_info_billing" name="leadbox-settings[additional_info_billing]" value="%s" />',
      isset($this->leadbox_settings['additional_info_billing']) ? esc_attr($this->leadbox_settings['additional_info_billing']) : ''
    );
  }

  public function group_name_option_callback()
  {
    printf(
      '<input type="text" id="additional_info_group_name" name="leadbox-settings[additional_info_group_name]" value="%s" />',
      isset($this->leadbox_settings['additional_info_group_name']) ? esc_attr($this->leadbox_settings['additional_info_group_name']) : ''
    );
  }

  public function enable_lbx_datalayer_callback()
  {
    if (!isset($this->leadbox_settings['enable_lbx_datalayer'])) {
      $this->leadbox_settings['enable_lbx_datalayer'] = "Disabled";
    }
    echo '<select id="enable_lbx_datalayer" name="leadbox-settings[enable_lbx_datalayer]">';
    if (strtolower($this->leadbox_settings['enable_lbx_datalayer']) == 'enabled') {
      echo '<option value="Disabled">Disabled</option>';
      echo '<option selected value="Enabled">Enabled</option>';
    } else {
      echo '<option selected value="Disabled">Disabled</option>';
      echo '<option value="Enabled">Enabled</option>';
    }
    echo '</select>';
  }

  public function leadbox_id_callback()
  {
    printf(
      '<input type="text" id="leadbox_id" name="leadbox-settings[leadbox_id]" value="%s" />',
      isset($this->leadbox_settings['leadbox_id']) ? esc_attr($this->leadbox_settings['leadbox_id']) : ''
    );
  }

  public function terms_and_conditions_url_callback()
  {
    printf(
      '<input type="text" id="terms_and_conditions_url" name="dealer-settings-policies-options[terms_and_conditions_url]" value="%s" />',
      isset($this->policies_options['terms_and_conditions_url']) ? esc_attr($this->policies_options['terms_and_conditions_url']) : ''
    );
  }

  public function privacy_policy_url_callback()
  {
    printf(
      '<input type="text" id="privacy_policy_url" name="dealer-settings-policies-options[privacy_policy_url]" value="%s" />',
      isset($this->policies_options['privacy_policy_url']) ? esc_attr($this->policies_options['privacy_policy_url']) : ''
    );
  }

  public function terms_and_conditions_url_fr_callback()
  {
    printf(
      '<input type="text" id="terms_and_conditions_url_fr" name="dealer-settings-policies-options[terms_and_conditions_url_fr]" value="%s" />',
      isset($this->policies_options['terms_and_conditions_url_fr']) ? esc_attr($this->policies_options['terms_and_conditions_url_fr']) : ''
    );
  }

  public function privacy_policy_url_fr_callback()
  {
    printf(
      '<input type="text" id="privacy_policy_url_fr" name="dealer-settings-policies-options[privacy_policy_url_fr]" value="%s" />',
      isset($this->policies_options['privacy_policy_url_fr']) ? esc_attr($this->policies_options['privacy_policy_url_fr']) : ''
    );
  }

  public function disclaimer_new_callback()
  {
    include('richtext/new.php');
  }
  public function disclaimer_used_callback()
  {
    include('richtext/used.php');
  }

  public function disclaimer_new_callback_fr()
  {
    include('richtext/new-fr.php');
  }
  public function disclaimer_used_callback_fr()
  {
    include('richtext/used-fr.php');
  }

  public function filter_zero_result_message()
  {
    include('richtext/zero-result.php');
  }
  public function filter_min_result_message()
  {
    include('richtext/min-result.php');
  }

	public function filter_min_result_number()
  {
    printf(
      '<input type="number" id="filter_min_number" name="dealer-settings-filter-options[filter_min_number]" value="%s" min="0" step="1"/>',
      isset($this->filter_options['filter_min_number']) ? esc_attr($this->filter_options['filter_min_number']) : ''
    );
  }

  public function filter_zero_result_message_fr()
  {
    include('richtext/zero-result-fr.php');
  }
  public function filter_min_result_message_fr()
  {
    include('richtext/min-result-fr.php');
  }

  public function facebook_socialmedia_callback()
  {
    printf(
      '<input type="text" id="facebook_socialmedia" name="dealer-settings-socialmedia-options[facebook_socialmedia]" value="%s" />',
      isset($this->socialmedia_options['facebook_socialmedia']) ? esc_attr($this->socialmedia_options['facebook_socialmedia']) : ''
    );
  }

  public function twitter_socialmedia_callback()
  {
    printf(
      '<input type="text" id="twitter_socialmedia" name="dealer-settings-socialmedia-options[twitter_socialmedia]" value="%s" />',
      isset($this->socialmedia_options['twitter_socialmedia']) ? esc_attr($this->socialmedia_options['twitter_socialmedia']) : ''
    );
  }

  public function instagram_socialmedia_callback()
  {
    printf(
      '<input type="text" id="instagram_socialmedia" name="dealer-settings-socialmedia-options[instagram_socialmedia]" value="%s" />',
      isset($this->socialmedia_options['instagram_socialmedia']) ? esc_attr($this->socialmedia_options['instagram_socialmedia']) : ''
    );
  }

  public function pinterest_socialmedia_callback()
  {
    printf(
      '<input type="text" id="pinterest_socialmedia" name="dealer-settings-socialmedia-options[pinterest_socialmedia]" value="%s" />',
      isset($this->socialmedia_options['pinterest_socialmedia']) ? esc_attr($this->socialmedia_options['pinterest_socialmedia']) : ''
    );
  }

  public function youtube_socialmedia_callback()
  {
    printf(
      '<input type="text" id="youtube_socialmedia" name="dealer-settings-socialmedia-options[youtube_socialmedia]" value="%s" />',
      isset($this->socialmedia_options['youtube_socialmedia']) ? esc_attr($this->socialmedia_options['youtube_socialmedia']) : ''
    );
  }

  public function linkedin_socialmedia_callback()
  {
    printf(
      '<input type="text" id="linkedin_socialmedia" name="dealer-settings-socialmedia-options[linkedin_socialmedia]" value="%s" />',
      isset($this->socialmedia_options['linkedin_socialmedia']) ? esc_attr($this->socialmedia_options['linkedin_socialmedia']) : ''
    );
  }

  public function tiktok_socialmedia_callback()
  {
    printf(
      '<input type="text" id="tiktok_socialmedia" name="dealer-settings-socialmedia-options[tiktok_socialmedia]" value="%s" />',
      isset($this->socialmedia_options['tiktok_socialmedia']) ? esc_attr($this->socialmedia_options['tiktok_socialmedia']) : ''
    );
  }

  public function img_vehicle_pricing_one()
  {
    echo '<div class="vehicle-pricing-img" style="
    position: absolute;
    right: 100px;
    top: 90px;
    ">
    <img width="400" src="http://cardealerstg.blob.core.windows.net/leadbox/LB-fields.jpg"/>
    </div>';
  }
  public function img_vehicle_pricing_two()
  {
    echo '<div class="vehicle-pricing-img" style="
    position: absolute;
    right: 100px;
    bottom: 70px;
    ">
    <img width="350" src="http://cardealerstg.blob.core.windows.net/leadbox/phones.png"/>
    </div>';
  }

  public function img_vehicle_pricing_three()
  {
    echo '<div class="vehicle-pricing-img" style="
    position: absolute;
    right: 100px;
    bottom: 70px;
    ">
    </div>';
  }

  function prepareData()
  {
    $lbsettings = get_option('leadbox-settings');

    $domain = $_SERVER['SERVER_NAME'];
    $dealer_name = "";
    $group_name = "";
    $primary_make = $lbsettings['manufacturer'];
    $oem_program = $lbsettings['oem_program'];
    $city = "";
    $state = "";
    $country = "";
    $live_date = "";
    $purpose = "";
    $status = "";
    $leadbox_billing = "";
    $main_languague = "";
    $header = print_component_version('header');
    $footer = "";
    $srp_filter = "";
    $vehicle_card = "";
    $vdp_layout = "";
    $vdp_gallery = "";
    $vdp_cta = "";
    $vdp_pricing = "";
    $vdp_financing = "";
    $vdp_lease = "";
    $vdp_description = "";
    $vdp_features = "";
    $vdp_upgrades = "";
    $live_agent = validateServices($lbsettings['live_agent']);
    $carfax = validateServices($lbsettings['carfax']);
    $iboost = validateServices($lbsettings['iboost']);
    $moto_insights = validateServices($lbsettings['moto_insight']);
    $cartender = validateServices($lbsettings['cartender']);
    $ga_token = $lbsettings['google_analytics_id'];
    $gtm_token = $lbsettings['google_tag_manager_token'];
  }
}

if (is_admin())
  $my_settings_page = new LeadboxSettings();