<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
<?php
namespace Elementor\Modules\Components\Documents;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly
}

class Component_Overridable_Prop {
	/** @var string */
	public $override_key;

	/** @var string */
	public $element_id;

	/** @var string */
	public $el_type;

	/** @var string */
	public $widget_type;

	/** @var string */
	public $prop_key;

	/** @var string */
	public $label;

	/** @var array{ $$type: string, value: mixed } */
	public $origin_value;

	/** @var string */
	public $group_id;

	/** @var ?array{ $el_type: string, $widget_type: string, $prop_key: string } */
	public $origin_prop_fields = null;

	public function __construct( array $overridable_prop ) {
		$this->override_key = $overridable_prop['overrideKey'];
		$this->element_id = $overridable_prop['elementId'];
		$this->el_type = $overridable_prop['elType'];
		$this->widget_type = $overridable_prop['widgetType'];
		$this->prop_key = $overridable_prop['propKey'];
		$this->label = $overridable_prop['label'];
		$this->origin_value = $overridable_prop['originValue'];
		$this->group_id = $overridable_prop['groupId'] ?? null;

		if ( isset( $overridable_prop['originPropFields'] ) ) {
			$this->origin_prop_fields = [
				'el_type' => $overridable_prop['originPropFields']['elType'],
				'widget_type' => $overridable_prop['originPropFields']['widgetType'],
				'prop_key' => $overridable_prop['originPropFields']['propKey'],
				'element_id' => $overridable_prop['originPropFields']['elementId'],
			];
		}
	}

	public static function make( array $overridable_prop ): self {
		return new self( $overridable_prop );
	}

	public function to_associative_array(): array {
		$result = [
			'overrideKey' => $this->override_key,
			'elementId'   => $this->element_id,
			'elType'      => $this->el_type,
			'widgetType'  => $this->widget_type,
			'propKey'     => $this->prop_key,
			'label'       => $this->label,
			'originValue' => $this->origin_value,
			'groupId'     => $this->group_id,
		];

		if ( $this->origin_prop_fields ) {
			$result['originPropFields'] = [
				'elType'     => $this->origin_prop_fields['el_type'],
				'widgetType' => $this->origin_prop_fields['widget_type'],
				'propKey'    => $this->origin_prop_fields['prop_key'],
				'elementId'  => $this->origin_prop_fields['element_id'],
			];
		}

		return $result;
	}
}
