<?php
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

require_once( QTRANSLATE_DIR . '/qtranslate_date_time.php' );

/**
 * locale for current language and set it on PHP.
 */
function qtranxf_localeForCurrentLanguage( $locale ) {
    static $locale_lang;//cache
    if ( ! empty( $locale_lang ) ) {
        return $locale_lang;
    }
    global $q_config;
    $lang        = $q_config['language'];
    $locale_lang = $q_config['locale'][ $lang ];

    // submit a few possible locales
    $lc             = array();
    $lc[]           = $locale_lang . '.utf8';
    $lc[]           = $locale_lang . '@euro';
    $lc[]           = $locale_lang;
    $windows_locale = qtranxf_default_windows_locale();
    if ( isset( $windows_locale[ $lang ] ) ) {
        $lc[] = $windows_locale[ $lang ];
    }
    $lc[] = $lang;

    // return the correct locale and most importantly set it (wordpress doesn't, which is bad)
    // only set LC_TIME as everything else doesn't seem to work with windows
    $loc = setlocale( LC_TIME, $lc );
    if ( ! $loc ) {
        $lc2 = array();
        if ( strlen( $locale_lang ) == 2 ) {
            $lc2[] = $locale_lang . '_' . strtoupper( $locale_lang );
            $loc   = $locale_lang . '_' . strtoupper( $lang );
            if ( ! in_array( $loc, $lc2 ) ) {
                $lc2[] = $loc;
            }
        }
        $loc = $lang . '_' . strtoupper( $lang );
        if ( ! in_array( $loc, $lc2 ) ) {
            $lc2[] = $loc;
        }
        setlocale( LC_TIME, $lc2 );
    }

    return $locale_lang;
}

function qtranxf_useCurrentLanguageIfNotFoundShowEmpty( $content ) {
    global $q_config;

    return qtranxf_use( $q_config['language'], $content, false, true );
}

function qtranxf_useCurrentLanguageIfNotFoundShowAvailable( $content ) {
    global $q_config;

    return qtranxf_use( $q_config['language'], $content, true, false );
}

function qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage( $content ) {
    global $q_config;

    return qtranxf_use( $q_config['language'], $content, false, false );
}

function qtranxf_useDefaultLanguage( $content ) {
    global $q_config;

    return qtranxf_use( $q_config['default_language'], $content, false, false );
}

function qtranxf_versionLocale() {
    return 'en_US';
}

function qtranxf_useRawTitle( $title, $raw_title = '', $context = 'save' ) {
    switch ( $context ) {
        case 'save':
            {
                if ( empty( $raw_title ) ) {
                    $raw_title = $title;
                }
                $raw_title = qtranxf_useDefaultLanguage( $raw_title );
                $title     = remove_accents( $raw_title );
            }
            break;
        default:
            break;
    }

    return $title;
}

function qtranxf_gettext( $translated_text ) {
    //same as qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage
    global $q_config;

    return qtranxf_use( $q_config['language'], $translated_text, false );
}

function qtranxf_gettext_with_context( $translated_text ) {
    //same as qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage
    global $q_config;

    return qtranxf_use( $q_config['language'], $translated_text, false );
}

function qtranxf_ngettext( $translated_text ) {
    //same as qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage
    global $q_config;

    return qtranxf_use( $q_config['language'], $translated_text, false );
}

// Hooks defined differently in admin and frontend
add_filter( 'wp_trim_words', 'qtranxf_trim_words', 0, 4 );


// Hooks (Actions)
add_action( 'widgets_init', 'qtranxf_widget_init' );


// Hooks (execution time critical filters)
add_filter( 'sanitize_title', 'qtranxf_useRawTitle', 0, 3 );

add_filter( 'comment_moderation_subject', 'qtranxf_useDefaultLanguage', 0 );
add_filter( 'comment_moderation_text', 'qtranxf_useDefaultLanguage', 0 );

// since 3.1 changed priority from 0 to 100, since other plugins,
// like https://wordpress.org/plugins/siteorigin-panels generate additional content, which also needs to be translated.
add_filter( 'the_content', 'qtranxf_useCurrentLanguageIfNotFoundShowAvailable', 100 );
add_filter( 'the_excerpt', 'qtranxf_useCurrentLanguageIfNotFoundShowAvailable', 0 );
add_filter( 'the_excerpt_rss', 'qtranxf_useCurrentLanguageIfNotFoundShowAvailable', 0 );

add_filter( 'get_comment_date', 'qtranxf_dateFromCommentForCurrentLanguage', 0, 3 );
add_filter( 'get_comment_time', 'qtranxf_timeFromCommentForCurrentLanguage', 0, 5 );
add_filter( 'get_post_modified_time', 'qtranxf_timeModifiedFromPostForCurrentLanguage', 0, 3 );
add_filter( 'get_the_time', 'qtranxf_timeFromPostForCurrentLanguage', 0, 3 );
add_filter( 'get_the_date', 'qtranxf_dateFromPostForCurrentLanguage', 0, 3 );
add_filter( 'get_the_modified_date', 'qtranxf_dateModifiedFromPostForCurrentLanguage', 0, 2 );

add_filter( 'locale', 'qtranxf_localeForCurrentLanguage', 99 );
add_filter( 'core_version_check_locale', 'qtranxf_versionLocale' );

add_filter( 'post_title', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'tag_rows', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'wp_list_categories', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'wp_title', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'single_post_title', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'bloginfo', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'get_others_drafts', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'get_bloginfo_rss', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'get_wp_title_rss', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'wp_title_rss', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'the_title_rss', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'the_content_rss', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'get_pages', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'bloginfo_rss', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'the_category_rss', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'term_links-post_tag', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'link_name', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'link_description', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );
add_filter( 'the_author', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0 );

add_filter( 'comment_notification_text', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage' );
add_filter( 'comment_notification_headers', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage' );
add_filter( 'comment_notification_subject', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage' );

add_filter( 'pre_option_rss_language', 'qtranxf_getLanguage', 0 );

add_filter( '_wp_post_revision_field_post_title', 'qtranxf_showAllSeparated', 0 );
add_filter( '_wp_post_revision_field_post_content', 'qtranxf_showAllSeparated', 0 );
add_filter( '_wp_post_revision_field_post_excerpt', 'qtranxf_showAllSeparated', 0 );

add_filter( 'oembed_response_data', 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage' );
