<?php
namespace Elementor;

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

/**
 * Elementor text stroke control.
 *
 * A group control for creating a stroke effect on text. Displays input fields to define
 * the text stroke and color stroke.
 *
 * @since 3.5.0
 */
class Group_Control_Text_Stroke extends Group_Control_Base {

	/**
	 * Fields.
	 *
	 * Holds all the text stroke control fields.
	 *
	 * @since 3.5.0
	 * @access protected
	 * @static
	 *
	 * @var array Text Stroke control fields.
	 */
	protected static $fields;

	/**
	 * Get text stroke control type.
	 *
	 * Retrieve the control type, in this case `text-stroke`.
	 *
	 * @since 3.5.0
	 * @access public
	 * @static
	 *
	 * @return string Control type.
	 */
	public static function get_type() {
		return 'text-stroke';
	}

	/**
	 * Init fields.
	 *
	 * Initialize text stroke control fields.
	 *
	 * @since 3.5.0
	 * @access protected
	 *
	 * @return array Control fields.
	 */
	protected function init_fields() {
		$controls = [];

		$controls['text_stroke'] = [
			'label' => esc_html__( 'Text Stroke', 'elementor' ),
			'type' => Controls_Manager::SLIDER,
			'size_units' => [ 'px', 'em', 'rem' ],
			'range' => [
				'px' => [
					'min' => 0,
					'max' => 10,
				],
				'em' => [
					'min' => 0,
					'max' => 1,
					'step' => 0.01,
				],
				'rem' => [
					'min' => 0,
					'max' => 1,
					'step' => 0.01,
				],
			],
			'selector' => '{{WRAPPER}}',
			'selectors' => [
				'{{SELECTOR}}' => '-webkit-text-stroke: {{SIZE}}{{UNIT}}; stroke-width: {{SIZE}}{{UNIT}}',
			],
		];

		$controls['stroke_color'] = [
			'label' => esc_html__( 'Stroke Color', 'elementor' ),
			'type' => Controls_Manager::COLOR,
			'default' => '#000',
			'selector' => '{{WRAPPER}}',
			'selectors' => [
				'{{SELECTOR}}' => '-webkit-text-stroke-color: {{VALUE}}; stroke: {{VALUE}};',
			],
		];

		return $controls;
	}

	/**
	 * Get default options.
	 *
	 * Retrieve the default options of the text stroke control. Used to return the
	 * default options while initializing the text stroke control.
	 *
	 * @since 3.5.0
	 * @access protected
	 *
	 * @return array Default text stroke control options.
	 */
	protected function get_default_options() {
		return [
			'popover' => [
				'starter_title' => _x( 'Text Stroke', 'Text Stroke Control', 'elementor' ),
				'starter_name' => 'text_stroke_type',
				'starter_value' => 'yes',
				'settings' => [
					'render_type' => 'ui',
				],
			],
		];
	}
}
