<?php
namespace WprAddons\Modules\PasswordProtectedContent\Widgets;

use Elementor\Widget_Base;
use Elementor\Controls_Manager;
use Elementor\Group_Control_Typography;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Box_Shadow;
use WprAddons\Classes\Utilities;

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

class Wpr_Password_Protected_Content extends Widget_Base {

	public function get_name() {
		return 'wpr-password-protected-content';
	}

	public function get_title() {
		return esc_html__( 'Password Protected Content', 'wpr-addons' );
	}

	public function get_icon() {
		return 'wpr-icon eicon-lock';
	}

	public function get_categories() {
		return [ 'wpr-widgets' ];
	}

	public function get_keywords() {
		return [ 'password', 'protected', 'content', 'restrict', 'role', 'gate' ];
	}

	public function check_password_cookie( $settings ) {
		$widget_id = $this->get_id();
		$password = isset( $settings['set_password'] ) ? $settings['set_password'] : '';
		$cookie_name = 'wpr_ppc_' . md5( $password . $widget_id );

		return isset( $_COOKIE[ $cookie_name ] ) && $_COOKIE[ $cookie_name ] === md5( $password );
	}

	public function wpr_ppc_template( $id ) {
		if ( empty( $id ) ) {
			return '';
		}

		if ( defined( 'ICL_LANGUAGE_CODE' ) ) {
			$default_language_code = apply_filters( 'wpml_default_language', null );
			if ( ICL_LANGUAGE_CODE !== $default_language_code ) {
				$id = icl_object_id( $id, 'elementor_library', false, ICL_LANGUAGE_CODE );
			}
		}

		$edit_link = '<span class="wpr-template-edit-btn" data-permalink="' . esc_url( get_permalink( $id ) ) . '">Edit Template</span>';

		$type = get_post_meta( get_the_ID(), '_wpr_template_type', true ) || get_post_meta( $id, '_elementor_template_type', true );
		$has_css = 'internal' === get_option( 'elementor_css_print_method' ) || '' !== $type;

		\WprAddons\Classes\Utilities::enqueue_inner_template_assets( $id );

		return \Elementor\Plugin::instance()->frontend->get_builder_content_for_display( $id, $has_css ) . $edit_link;
	}

	public function add_control_content_type() {
		$this->add_control(
			'content_type',
			[
				'label' => esc_html__( 'Content Type', 'wpr-addons' ),
				'type' => Controls_Manager::SELECT,
				'default' => 'text',
				'options' => [
					'text'         => esc_html__( 'Text', 'wpr-addons' ),
					'pro-template' => esc_html__( 'Elementor Template (Pro)', 'wpr-addons' ),
				],
			]
		);
	}

	protected function register_controls() {

		// Section: Protected Content
		$this->start_controls_section(
			'section_protected_content',
			[
				'label' => esc_html__( 'Protected Content', 'wpr-addons' ),
			]
		);

		Utilities::wpr_library_buttons( $this, Controls_Manager::RAW_HTML );

		$this->add_control_content_type();

		// Upgrade to Pro Notice
		Utilities::upgrade_pro_notice( $this, Controls_Manager::RAW_HTML, 'password-protected-content', 'content_type', ['pro-template'] );

		$this->add_control(
			'protected_content',
			[
				'label' => esc_html__( 'Content', 'wpr-addons' ),
				'type' => Controls_Manager::WYSIWYG,
				'default' => esc_html__( 'This is the protected content that only authorized users can see.', 'wpr-addons' ),
				'condition' => [
					'content_type' => 'text',
				],
			]
		);

		$this->add_control(
			'protected_template',
			[
				'label' => esc_html__( 'Select Template', 'wpr-addons' ),
				'type' => 'wpr-ajax-select2',
				'options' => 'ajaxselect2/get_elementor_templates',
				'label_block' => true,
				'condition' => [
					'content_type' => 'template',
				],
			]
		);

		$this->end_controls_section();

		// Section: Protection Type
		$this->start_controls_section(
			'section_protection_type',
			[
				'label' => esc_html__( 'Protection Type', 'wpr-addons' ),
			]
		);

		$this->add_control(
			'protection_type',
			[
				'label' => esc_html__( 'Protection Type', 'wpr-addons' ),
				'type' => Controls_Manager::SELECT,
				'default' => 'password',
				'options' => [
					'role' => esc_html__( 'User Role', 'wpr-addons' ),
					'password' => esc_html__( 'Password', 'wpr-addons' ),
				],
			]
		);

		$this->add_control(
			'user_roles',
			[
				'label' => esc_html__( 'Select Roles', 'wpr-addons' ),
				'type' => Controls_Manager::SELECT2,
				'multiple' => true,
				'options' => Utilities::get_user_roles(),
				'default' => [ 'administrator' ],
				'condition' => [
					'protection_type' => 'role',
				],
			]
		);

		$this->add_control(
			'set_password',
			[
				'label' => esc_html__( 'Set Password', 'wpr-addons' ),
				'type' => Controls_Manager::TEXT,
				'input_type' => 'text',
				'default' => '',
				'condition' => [
					'protection_type' => 'password',
				],
			]
		);

		$this->add_control(
			'separator_message',
			[
				'type' => Controls_Manager::DIVIDER,
			]
		);

		$this->add_control(
			'show_error_message',
			[
				'label' => esc_html__( 'Show Protected Message', 'wpr-addons' ),
				'type' => Controls_Manager::SWITCHER,
				'default' => 'yes',
			]
		);

		$this->add_control(
			'public_text',
			[
				'label' => esc_html__( 'Protected Message', 'wpr-addons' ),
				'type' => Controls_Manager::TEXTAREA,
				'default' => esc_html__( 'You do not have permission to see this content.', 'wpr-addons' ),
				'condition' => [
					'show_error_message' => 'yes',
				],
			]
		);

		$this->add_control(
			'separator_preview',
			[
				'type' => Controls_Manager::DIVIDER,
			]
		);

		$this->add_control(
			'role_show_error_preview',
			[
				'label' => esc_html__( 'Preview Protected Message', 'wpr-addons' ),
				'type' => Controls_Manager::SWITCHER,
				'default' => '',
				'condition' => [
					'protection_type' => 'role',
					'show_error_message' => 'yes',
				],
				'description' => esc_html__( 'Enable preview.', 'wpr-addons' ),
			]
		);

		$this->add_control(
			'password_show_content_preview',
			[
				'label' => esc_html__( 'Show Content Preview', 'wpr-addons' ),
				'type' => Controls_Manager::SWITCHER,
				'default' => '',
				'condition' => [
					'protection_type' => 'password',
				],
				'description' => esc_html__( 'Enable to preview the protected content in the editor for styling.', 'wpr-addons' ),
			]
		);

		$this->end_controls_section();

		// Section: Pro Features
		Utilities::pro_features_list_section( $this, '', Controls_Manager::RAW_HTML, 'password-protected-content', [
			'Content Type: Elementor Template - protect any template behind a password',
		] );

		// ===== Style Tab =====

		// Section: Form Container Style
		$this->start_controls_section(
			'section_style_form_container',
			[
				'label' => esc_html__( 'Form Container', 'wpr-addons' ),
				'tab' => Controls_Manager::TAB_STYLE,
			]
		);

		$this->add_control(
			'form_layout',
			[
				'label' => esc_html__( 'Form Layout', 'wpr-addons' ),
				'type' => Controls_Manager::SELECT,
				'default' => 'separate',
				'options' => [
					'separate' => esc_html__( 'Separate', 'wpr-addons' ),
					'inline' => esc_html__( 'Inline', 'wpr-addons' ),
				],
				'condition' => [
					'protection_type' => 'password',
				],
			]
		);

		$this->add_responsive_control(
			'form_inline_gap',
			[
				'label' => esc_html__( 'Gap', 'wpr-addons' ),
				'type' => Controls_Manager::SLIDER,
				'size_units' => [ 'px' ],
				'range' => [
					'px' => [
						'min' => 0,
						'max' => 50,
					],
				],
				'default' => [
					'size' => 10,
					'unit' => 'px',
				],
				'condition' => [
					'protection_type' => 'password',
				],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-form' => 'gap: {{SIZE}}{{UNIT}};',
				],
			]
		);

		$this->add_control(
			'separator_container_style',
			[
				'type' => Controls_Manager::DIVIDER,
				'condition' => [
					'protection_type' => 'password',
				],
			]
		);

		$this->add_control(
			'form_container_bg_color',
			[
				'label' => esc_html__( 'Background Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-container' => 'background-color: {{VALUE}};',
				],
			]
		);

		$this->add_responsive_control(
			'form_container_padding',
			[
				'label' => esc_html__( 'Padding', 'wpr-addons' ),
				'type' => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em' ],
				'default' => [
					'top' => '0',
					'right' => '0',
					'bottom' => '0',
					'left' => '0',
					'unit' => 'px',
					'isLinked' => true,
				],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-container' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Border::get_type(),
			[
				'name' => 'form_container_border',
				'selector' => '{{WRAPPER}} .wpr-ppc-container',
			]
		);

		$this->add_responsive_control(
			'form_container_border_radius',
			[
				'label' => esc_html__( 'Border Radius', 'wpr-addons' ),
				'type' => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', '%' ],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-container' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Box_Shadow::get_type(),
			[
				'name' => 'form_container_box_shadow',
				'selector' => '{{WRAPPER}} .wpr-ppc-container',
			]
		);

		$this->add_responsive_control(
			'form_container_align',
			[
				'label' => esc_html__( 'Alignment', 'wpr-addons' ),
				'type' => Controls_Manager::CHOOSE,
				'options' => [
					'left' => [
						'title' => esc_html__( 'Left', 'wpr-addons' ),
						'icon' => 'eicon-text-align-left',
					],
					'center' => [
						'title' => esc_html__( 'Center', 'wpr-addons' ),
						'icon' => 'eicon-text-align-center',
					],
					'right' => [
						'title' => esc_html__( 'Right', 'wpr-addons' ),
						'icon' => 'eicon-text-align-right',
					],
				],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-container' => 'text-align: {{VALUE}};',
				],
			]
		);

		$this->end_controls_section();

		// Section: Message Style
		$this->start_controls_section(
			'section_style_message',
			[
				'label' => esc_html__( 'Message', 'wpr-addons' ),
				'tab' => Controls_Manager::TAB_STYLE,
			]
		);

		$this->add_control(
			'message_color',
			[
				'label' => esc_html__( 'Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'default' => '#333333',
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-message' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'message_bg_color',
			[
				'label' => esc_html__( 'Background Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-message' => 'background-color: {{VALUE}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name' => 'message_typography',
				'selector' => '{{WRAPPER}} .wpr-ppc-message',
			]
		);

		$this->add_responsive_control(
			'message_align',
			[
				'label' => esc_html__( 'Alignment', 'wpr-addons' ),
				'type' => Controls_Manager::CHOOSE,
				'options' => [
					'left' => [
						'title' => esc_html__( 'Left', 'wpr-addons' ),
						'icon' => 'eicon-text-align-left',
					],
					'center' => [
						'title' => esc_html__( 'Center', 'wpr-addons' ),
						'icon' => 'eicon-text-align-center',
					],
					'right' => [
						'title' => esc_html__( 'Right', 'wpr-addons' ),
						'icon' => 'eicon-text-align-right',
					],
				],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-message' => 'text-align: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'separator_message_spacing',
			[
				'type' => Controls_Manager::DIVIDER,
			]
		);

		$this->add_responsive_control(
			'message_padding',
			[
				'label' => esc_html__( 'Padding', 'wpr-addons' ),
				'type' => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em' ],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-message' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_responsive_control(
			'message_margin',
			[
				'label' => esc_html__( 'Margin', 'wpr-addons' ),
				'type' => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em' ],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-message' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->end_controls_section();

		// Section: Input Field Style
		$this->start_controls_section(
			'section_style_input',
			[
				'label' => esc_html__( 'Input Field', 'wpr-addons' ),
				'tab' => Controls_Manager::TAB_STYLE,
				'condition' => [
					'protection_type' => 'password',
				],
			]
		);

		$this->add_control(
			'input_text_color',
			[
				'label' => esc_html__( 'Text Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'default' => '#333333',
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-password-input' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'input_placeholder_color',
			[
				'label' => esc_html__( 'Placeholder Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'default' => '#999999',
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-password-input::placeholder' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'input_bg_color',
			[
				'label' => esc_html__( 'Background Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'default' => '#ffffff',
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-password-input' => 'background-color: {{VALUE}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name' => 'input_typography',
				'selector' => '{{WRAPPER}} .wpr-ppc-password-input',
			]
		);

		$this->add_control(
			'separator_input_border',
			[
				'type' => Controls_Manager::DIVIDER,
			]
		);

		$this->add_group_control(
			Group_Control_Border::get_type(),
			[
				'name' => 'input_border',
				'selector' => '{{WRAPPER}} .wpr-ppc-password-input',
				'fields_options' => [
					'border' => [
						'default' => 'solid',
					],
					'width' => [
						'default' => [
							'top' => '1',
							'right' => '1',
							'bottom' => '1',
							'left' => '1',
							'unit' => 'px',
							'isLinked' => true,
						],
					],
					'color' => [
						'default' => '#020101',
					],
				],
			]
		);

		$this->add_responsive_control(
			'input_border_radius',
			[
				'label' => esc_html__( 'Border Radius', 'wpr-addons' ),
				'type' => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', '%' ],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-password-input' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_control(
			'separator_input_spacing',
			[
				'type' => Controls_Manager::DIVIDER,
			]
		);

		$this->add_responsive_control(
			'input_padding',
			[
				'label' => esc_html__( 'Padding', 'wpr-addons' ),
				'type' => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em' ],
				'default' => [
					'top' => '10',
					'right' => '15',
					'bottom' => '10',
					'left' => '15',
					'unit' => 'px',
				],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-password-input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->end_controls_section();

		// Section: Submit Button Style
		$this->start_controls_section(
			'section_style_button',
			[
				'label' => esc_html__( 'Submit Button', 'wpr-addons' ),
				'tab' => Controls_Manager::TAB_STYLE,
				'condition' => [
					'protection_type' => 'password',
				],
			]
		);

		$this->start_controls_tabs( 'button_style_tabs' );

		// Normal
		$this->start_controls_tab(
			'button_normal',
			[
				'label' => esc_html__( 'Normal', 'wpr-addons' ),
			]
		);

		$this->add_control(
			'button_text_color',
			[
				'label' => esc_html__( 'Text Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'default' => '#ffffff',
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-submit-btn' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'button_bg_color',
			[
				'label' => esc_html__( 'Background Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'default' => '#605BE5',
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-submit-btn' => 'background-color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'button_border_color',
			[
				'label' => esc_html__( 'Border Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-submit-btn' => 'border-color: {{VALUE}};',
				],
			]
		);

		$this->end_controls_tab();

		// Hover
		$this->start_controls_tab(
			'button_hover',
			[
				'label' => esc_html__( 'Hover', 'wpr-addons' ),
			]
		);

		$this->add_control(
			'button_text_color_hover',
			[
				'label' => esc_html__( 'Text Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'default' => '#ffffff',
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-submit-btn:hover' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'button_bg_color_hover',
			[
				'label' => esc_html__( 'Background Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'default' => '#5A3BE0',
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-submit-btn:hover' => 'background-color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'button_border_color_hover',
			[
				'label' => esc_html__( 'Border Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-submit-btn:hover' => 'border-color: {{VALUE}};',
				],
			]
		);

		$this->end_controls_tab();

		$this->end_controls_tabs();

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name' => 'button_typography',
				'selector' => '{{WRAPPER}} .wpr-ppc-submit-btn',
				'separator' => 'before',
			]
		);

		$this->add_control(
			'separator_button_border',
			[
				'type' => Controls_Manager::DIVIDER,
			]
		);

		$this->add_responsive_control(
			'button_border_radius',
			[
				'label' => esc_html__( 'Border Radius', 'wpr-addons' ),
				'type' => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', '%' ],
				'default' => [
					'top' => '3',
					'right' => '3',
					'bottom' => '3',
					'left' => '3',
					'unit' => 'px',
				],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-submit-btn' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_responsive_control(
			'button_padding',
			[
				'label' => esc_html__( 'Padding', 'wpr-addons' ),
				'type' => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em' ],
				'default' => [
					'top' => '10',
					'right' => '30',
					'bottom' => '10',
					'left' => '30',
					'unit' => 'px',
				],
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-submit-btn' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_control(
			'separator_button_extra',
			[
				'type' => Controls_Manager::DIVIDER,
			]
		);

		$this->add_control(
			'button_transition',
			[
				'label' => esc_html__( 'Transition Duration', 'wpr-addons' ),
				'type' => Controls_Manager::NUMBER,
				'default' => 0.3,
				'min' => 0,
				'max' => 3,
				'step' => 0.1,
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-submit-btn' => 'transition-duration: {{VALUE}}s;',
				],
			]
		);

		$this->end_controls_section();

		// Section: Wrong Password Error Style
		$this->start_controls_section(
			'section_style_error',
			[
				'label' => esc_html__( 'Password Error', 'wpr-addons' ),
				'tab' => Controls_Manager::TAB_STYLE,
				'condition' => [
					'protection_type' => 'password',
				],
			]
		);

		$this->add_control(
			'error_color',
			[
				'label' => esc_html__( 'Color', 'wpr-addons' ),
				'type' => Controls_Manager::COLOR,
				'default' => '#e74c3c',
				'selectors' => [
					'{{WRAPPER}} .wpr-ppc-error' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name' => 'error_typography',
				'selector' => '{{WRAPPER}} .wpr-ppc-error',
			]
		);

		$this->end_controls_section();
	}

	protected function render() {
		$settings = $this->get_settings_for_display();
		$is_editor = \Elementor\Plugin::$instance->editor->is_edit_mode();
		$authorized = false;

		if ( 'role' === $settings['protection_type'] ) {
			$allowed_roles = ! empty( $settings['user_roles'] ) ? $settings['user_roles'] : [];

			if ( $is_editor ) {
				// In editor: show content by default, show error only when preview switcher is on
				$authorized = 'yes' !== $settings['role_show_error_preview'];
			} elseif ( ! is_user_logged_in() ) {
				$authorized = in_array( 'guest', $allowed_roles, true );
			} else {
				$current_user = wp_get_current_user();
				$authorized = ! empty( array_intersect( $current_user->roles, $allowed_roles ) );
			}
		} elseif ( 'password' === $settings['protection_type'] ) {
			$authorized = $this->check_password_cookie( $settings );

			// Editor preview overrides
			if ( $is_editor ) {
				$authorized = 'yes' === $settings['password_show_content_preview'];
			}
		}

		$layout = isset( $settings['form_layout'] ) ? $settings['form_layout'] : 'separate';
		$form_class = 'wpr-ppc-form';
		if ( 'inline' === $layout ) {
			$form_class .= ' wpr-ppc-form-inline';
		}

		echo '<style>
			.wpr-ppc-form {
				display: flex;
				flex-direction: column;
			}
			.wpr-ppc-form .wpr-ppc-password-input {
				width: 100%;
			}
			.wpr-ppc-form-inline {
				flex-direction: row;
				flex-wrap: wrap;
				align-items: center;
			}
			.wpr-ppc-form-inline .wpr-ppc-password-input {
				flex: 1;
				min-width: 0;
			}
			.wpr-ppc-form-inline .wpr-ppc-error {
				width: 100%;
			}
		</style>';

		if ( $authorized ) {
			echo '<div class="wpr-ppc-container">';
			echo '<div class="wpr-ppc-content">';
			if ( 'text' === $settings['content_type'] ) {
				echo wp_kses_post( $settings['protected_content'] );
			} elseif ( 'template' === $settings['content_type'] && ! empty( $settings['protected_template'] ) ) {
				echo $this->wpr_ppc_template( $settings['protected_template'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
			}
			echo '</div>';
			echo '</div>';
		} elseif ( 'yes' === $settings['show_error_message'] || 'password' === $settings['protection_type'] ) {
			echo '<div class="wpr-ppc-container">';

			if ( 'yes' === $settings['show_error_message'] ) {
				echo '<div class="wpr-ppc-message">';
				echo wp_kses_post( $settings['public_text'] );
				echo '</div>';
			}

			if ( 'password' === $settings['protection_type'] ) {
				echo '<form class="' . esc_attr( $form_class ) . '" data-widget-id="' . esc_attr( $this->get_id() ) . '" data-post-id="' . esc_attr( get_the_ID() ) . '" data-nonce="' . esc_attr( wp_create_nonce( 'wpr_ppc_verify' ) ) . '">';
				echo '<input type="password" class="wpr-ppc-password-input" placeholder="' . esc_attr__( 'Enter Password', 'wpr-addons' ) . '" />';
				echo '<button type="submit" class="wpr-ppc-submit-btn">' . esc_html__( 'Submit', 'wpr-addons' ) . '</button>';
				echo '<div class="wpr-ppc-error" style="display:none;">' . esc_html__( 'Incorrect password. Please try again.', 'wpr-addons' ) . '</div>';
				echo '</form>';
			}

			echo '</div>';
		}
	}
}