<?php

namespace WCML\StandAlone;

use WPML\Core\ISitePress;
use WPML_WP_API;

class NullSitePress implements ISitePress {

	private ?WPML_WP_API $wp_api = null;

	/**
	 * @param bool   $refresh
	 * @param bool   $major_first
	 * @param string $order_by
	 * @return array
	 */
	public function get_active_languages( $refresh = false, $major_first = false, $order_by = 'english_name' ) {
		$code = $this->get_current_language();
		return [
			$code => [
				'id'             => 1,
				'code'           => $code,
				'major'          => 1,
				'active'         => 1,
				'default_locale' => get_locale(),
				'encode_url'     => 0,
				'tag'            => $code,
				'english_name'   => $code,
				'native_name'    => $code,
				'display_name'   => $code,
			],
		];
	}

	/** @return bool|mixed|null|string */
	public function get_admin_language() {
		return $this->get_current_language();
	}

	/** @return string */
	public function get_current_language() {
		return preg_replace( '/_.+/', '', get_locale() );
	}

	/**
	 * @param null|string $code
	 * @param bool|string $cookie_lang
	 */
	public function switch_lang( $code = null, $cookie_lang = false ) {

	}

	/** @return string|false */
	public function get_default_language() {
		return $this->get_current_language();
	}

	/**
	 * @param int         $trid
	 * @param string|null $el_type Use comment, post, page, {custom post time name}, nav_menu, nav_menu_item, category, post_tag, etc. (prefixed with 'post_', 'tax_', or nothing for 'comment').
	 * @param bool|null   $skip_empty
	 * @param bool|null   $all_statuses
	 * @param bool|null   $skip_cache
	 * @param bool|null   $skip_recursions
	 * @param bool|null   $skipPrivilegeChecking
	 *
	 * @return array<string,\stdClass>
	 */
	public function get_element_translations(
		$trid,
		$el_type = 'post_post',
		$skip_empty = false,
		$all_statuses = false,
		$skip_cache = false,
		$skip_recursions = false,
		$skipPrivilegeChecking = false
	 ) {
		 return [];
	}

	/**
	 * @param string $code
	 * @return string
	 */
	public function get_flag_url( $code ) {
		return '';
	}

	/**
	 * Find language of document based on given permalink
	 *
	 * @param string $url Local url in permalink form.
	 * @return string language code
	 */
	public function get_language_from_url( $url ) {
		return $this->get_current_language();
	}

	/**
	 * Filter to add language field to WordPress search form
	 *
	 * @param string $form HTML code of search for before filtering.
	 *
	 * @return string HTML code of search form
	 */
	public function get_search_form_filter( $form ) {
		return $form;
	}

	/**
	 * @param string     $key
	 * @param mixed|bool $default
	 * @return bool|mixed
	 * @since 3.1
	 */
	public function get_setting( $key, $default = false ) {
		return $default;
	}

	/** @return array */
	public function get_settings() {
		return [];
	}

	/** @return \WPML_WP_API */
	public function get_wp_api() {
		if ( ! ( $this->wp_api instanceof \WPML_WP_API ) ) {
			$this->wp_api = new WPML_WP_API();
		}

		return $this->wp_api;
	}

	/**
	 * @param string|bool|null $lang
	 * @return bool
	 */
	public function is_rtl( $lang = false ) {
		return is_rtl();
	}

	/**
	 * @param int    $element_id   Use term_taxonomy_id for taxonomies, post_id for posts.
	 * @param string $element_type Use comment, post, page, {custom post time name}, nav_menu, nav_menu_item, category,
	 *                             post_tag, etc. (prefixed with 'post_', 'tax_', or nothing for 'comment').
	 *
	 * @return null|string
	 */
	public function get_language_for_element( $element_id, $element_type ) {
		return $this->get_current_language();
	}
}
