<!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\Home\Transformations\Base;

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

use Elementor\Core\Isolation\Elementor_Adapter;
use Elementor\Core\Isolation\Elementor_Adapter_Interface;
use Elementor\Core\Isolation\Plugin_Status_Adapter;
use Elementor\Core\Isolation\Plugin_Status_Adapter_Interface;
use Elementor\Core\Isolation\Wordpress_Adapter;
use Elementor\Core\Isolation\Wordpress_Adapter_Interface;

abstract class Transformations_Abstract {

	protected const USER_TIER_FREE = 'free';
	protected const USER_TIER_PRO = 'pro';
	protected const USER_TIER_AGENCY = 'agency';
	protected const USER_TIER_ONE = 'one';

	protected Wordpress_Adapter_Interface $wordpress_adapter;
	protected Plugin_Status_Adapter_Interface $plugin_status_adapter;
	protected Elementor_Adapter_Interface $elementor_adapter;

	/**
	 * @param $args ?array{
	 *     wordpress_adapter: Wordpress_Adapter_Interface,
	 *     plugin_status_adapter: Plugin_Status_Adapter_Interface,
	 *     elementor_adapter: Elementor_Adapter_Interface,
	 * } the adapters to use in the transformations
	 */
	public function __construct( array $args = [] ) {
		$this->wordpress_adapter = $args['wordpress_adapter'] ?? new Wordpress_Adapter();
		$this->plugin_status_adapter = $args['plugin_status_adapter'] ?? new Plugin_Status_Adapter( $this->wordpress_adapter );
		$this->elementor_adapter = $args['elementor_adapter'] ?? new Elementor_Adapter();
	}

	protected function get_tier() {
		$tier = $this->elementor_adapter->get_tier();

		$filtered_tier = apply_filters( 'elementor/admin/homescreen_promotion_tier', $tier ) ?? $tier;

		return $this->normalize_tier( $filtered_tier );
	}

	private function normalize_tier( string $tier ): string {
		return self::USER_TIER_AGENCY === $tier ? self::USER_TIER_ONE : $tier;
	}

	abstract public function transform( array $home_screen_data ): array;
}
