<?php

namespace xlvask;

// Helpers
require_once WD . '/modules/xlvask/helpers/xlvask_helper.php';
require_once WD . '/modules/xlvask/helpers/xlvask_tasks.php';
require_once WD . '/modules/xlvask/helpers/xlvask_cache.php';
require_once WD . '/modules/xlvask/helpers/xlvask_customer.php';
require_once WD . '/modules/xlvask/helpers/xlvask_usage_log.php';
require_once WD . '/modules/xlvask/helpers/xlvask_wash_item.php';
require_once WD . '/modules/xlvask/helpers/xlvask_create_customer.php';
require_once WD . '/modules/xlvask/helpers/xlvask_vehicle.php';
require_once WD . '/modules/xlvask/helpers/xlvask_vehicles.php';
require_once WD . '/modules/xlvask/helpers/xlvask_guid.php';
require_once WD . '/modules/xlvask/helpers/xlvask_vehicle_type.php';
require_once WD . '/modules/xlvask/helpers/xlvask_vehicle_types.php';
// Parsers
require_once WD . '/modules/xlvask/helpers/xlvask_product_parser_t.php';
require_once WD . '/modules/xlvask/helpers/xlvask_product_parser.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_stor_bil.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_halleje.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_2_b_rstevask.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_3_b_rstevask.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ikke_ht_dysebom_bag.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ht_sider.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_skylning_med_ro.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_eu_spejl.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ikke_ht_dysebom_p_front.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_lift.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ht_chassis.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_undervognskylning.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ht_osc_sider_verst.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_s_be_dysebom.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_vask_udf_rt.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_manuel_ht_koldtvand.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_manuel_s_bepistol_t.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_manuel_spot_free.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_manual_ht_varmtvand.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_kapellvask_alle_trailere.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_special_s_be_front.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_lille_bil.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_chassisskylning.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ht_osc_sider_lave_tur.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_s_be_standard.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_special_s_be_bak.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_nettvand_skylning.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_specials_be_sider.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ikke_ht_dysebom_p_tag.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ht_osc_sider.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_kun_b_rster_ved_hytten.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_h_nger.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ikke_ht_dysebom_mellom_bil_trailer.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ikke_b_rster_mellom_bil_og_trailer.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_s_be_dysebom_tak.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ingen_b_rster_foran_no_brush_wash_front.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ht_dysebom.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ht_b_rstel_s.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ht_turbo.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_ikke_b_rster_p_kabinen.php';
require_once WD . '/modules/xlvask/helpers/xlvask_parser_afstr_mning.php';
use helpers\xlvask_cache;
use helpers\xlvask_create_customer;
use helpers\xlvask_customer;
use helpers\xlvask_guid;
use helpers\xlvask_helper;
use helpers\xlvask_tasks;
use helpers\xlvask_usage_log;
use helpers\xlvask_vehicle;
use helpers\xlvask_vehicle_type;
use helpers\xlvask_vehicle_types;
use helpers\xlvask_vehicles;
use helpers\xlvask_wash_item;

class xlvask_helpers
{
    /**
     * The xlvask tasks helper
     * @var string $xlvask_tasks
     */
    public string $xlvask_tasks = xlvask_tasks::class;
    /**
     * The xlvask cache helper
     * @var string $xlvask_cache
     */
    public string $xlvask_cache = xlvask_cache::class;
    /**
     * The xlvask customer helper
     * @var string $xlvask_customer
     */
    public string $xlvask_customer = xlvask_customer::class;
    /**
     * The xlvask usage log helper
     * @var string $xlvask_usage_log
     */
    public string $xlvask_usage_log = xlvask_usage_log::class;
    /**
     * The xlvask wash item helper
     * @var string $xlvask_wash_item
     */
    public string $xlvask_wash_item = xlvask_wash_item::class;
    /**
     * The xlvask create customers' helper
     * @var string $xlvask_create_customer
     */
    public string $xlvask_create_customer = xlvask_create_customer::class;
    /**
     * The xlvask vehicle helper
     * @var string $xlvask_vehicle
     */
    public string $xlvask_vehicle = xlvask_vehicle::class;
    /**
     * The xlvask GUID helper
     * @var string $xlvask_guid
     */
    public string $xlvask_guid = xlvask_guid::class;
    /**
     * The xlvask vehicle type helper
     * @var string $xlvask_vehicle_type
     */
    public string $xlvask_vehicle_type = xlvask_vehicle_type::class;
    /**
     * The xlvask vehicle types helper
     * @var string $xlvask_vehicle_types
     */
    public string $xlvask_vehicle_types = xlvask_vehicle_types::class;
    /**
     * The xlvask vehicles helper
     * @var string $xlvask_vehicles
     */
    public string $xlvask_vehicles = xlvask_vehicles::class;

    /**
     * Construct a new xlvask_helper instance.
     * This method is used to create a new instance of the xlvask_helper class.
     * It is used to initialize the helper classes that are required to be extended by the xlvask_helper class.
     * @param string $class The class name of the helper to be instantiated.
     * @note This is used to initialize the helper classes. Those require to be extended by the xlvask_helper class.
     * @return xlvask_vehicle_types|xlvask_vehicle_type|xlvask_vehicle|xlvask_create_customer|xlvask_wash_item|xlvask_usage_log|xlvask_customer|xlvask_cache|xlvask_tasks|xlvask_guid|xlvask_vehicles|xlvask_helper
     * @throws \Exception
     * @example
     * $xlvaskHelper = new xlvask_helpers();
     * $xlvaskHelper->new(xlvask_tasks::class);
     */
    public function new(string $class): xlvask_vehicle_types|xlvask_vehicle_type|xlvask_vehicle|xlvask_create_customer|xlvask_wash_item|xlvask_usage_log|xlvask_customer|xlvask_cache|xlvask_tasks|xlvask_guid|xlvask_vehicles|xlvask_helper
    {
        if (class_exists($class)) {
            // Check if the class is a subclass of xlvask_helper
            if (!is_subclass_of($class, xlvask_helper::class)) {
                throw new \Exception("Class $class must extend xlvask_helper.");
            }
            return new $class();
        } else {
            throw new \Exception("Class $class does not exist.");
        }
    }
}