<?php

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

add_action( 'init', 'tilfy_galeri_kisa_kodlari_kaydet' );
add_action( 'rest_api_init', 'tilfy_galeri_rest_kayit' );
add_action( 'wp_enqueue_scripts', 'tilfy_galeri_varliklari_kuyruk' );
add_action( 'wp_footer', 'tilfy_galeri_varliklari_yukle', 20 );
add_action( 'wp_footer', 'tilfy_galeri_modal_yazdir', 25 );

function tilfy_galeri_rest_kayit() {
	register_rest_route(
		'tilfy/v1',
		'/galeri/icerik/(?P<id>\d+)',
		array(
			'methods'             => 'GET',
			'callback'            => 'tilfy_rest_galeri_icerik',
			'permission_callback' => '__return_true',
			'args'                => array(
				'id'    => array(
					'validate_callback' => function ( $param ) {
						return (int) $param > 0;
					},
				),
				'token' => array(
					'required'          => true,
					'sanitize_callback' => 'sanitize_text_field',
				),
			),
		)
	);
}

function tilfy_rest_galeri_icerik( $istek ) {
	if ( ! function_exists( 'tilfy_galeri_etkin_mi' ) || ! tilfy_galeri_etkin_mi() ) {
		return tilfy_rest_yanit_hata( 'Galeri kapali', 403 );
	}
	$icerik_id = (int) $istek->get_param( 'id' );
	$token     = (string) $istek->get_param( 'token' );
	if ( ! tilfy_galeri_icerik_token_dogrula( $icerik_id, $token ) ) {
		return tilfy_rest_yanit_hata( 'Gecersiz istek', 403 );
	}
	$icerik = tilfy_galeri_icerik_idden( $icerik_id );
	if ( ! $icerik ) {
		return tilfy_rest_yanit_hata( 'Icerik bulunamadi', 404 );
	}
	$veri = tilfy_galeri_icerik_modal_verisi( $icerik );
	if ( ! $veri ) {
		return tilfy_rest_yanit_hata( 'Icerik bulunamadi', 404 );
	}
	return rest_ensure_response(
		array(
			'ok'   => true,
			'data' => $veri,
		)
	);
}

function tilfy_galeri_kisa_kod_etiketleri() {
	return array(
		'tilfy-instagram'  => 'instagram',
		'tilfy-facebook'   => 'facebook',
		'tilfy-youtube'    => 'youtube',
		'tilfy-linkedin'   => 'linkedin',
		'tilfy-tiktok'     => 'tiktok',
		'tilfy-threads'    => 'threads',
		'tilfy-wordpress'  => 'wordpress',
		'tilfy-all'        => 'tumu',
	);
}

function tilfy_galeri_kisa_kodlari_kaydet() {
	static $kayitli = false;
	if ( $kayitli ) {
		return;
	}
	$kayitli = true;
	foreach ( tilfy_galeri_kisa_kod_etiketleri() as $etiket => $platform ) {
		add_shortcode(
			$etiket,
			function ( $atts ) use ( $platform ) {
				return tilfy_galeri_kisa_kod_render( $atts, $platform );
			}
		);
	}
}

function tilfy_galeri_kisa_kod_render( $atts, $platform_sabit ) {
	if ( ! function_exists( 'tilfy_galeri_etkin_mi' ) || ! tilfy_galeri_etkin_mi() ) {
		return '';
	}
	if ( ! function_exists( 'tilfy_icerik_listele' ) ) {
		if ( function_exists( 'tilfy_frontend_bootstrap' ) ) {
			tilfy_frontend_bootstrap();
		}
	}
	if ( ! function_exists( 'tilfy_icerik_listele' ) ) {
		return '';
	}
	try {
		return tilfy_galeri_kisa_kod_render_icerik( $atts, $platform_sabit );
	} catch ( Throwable $e ) {
		if ( function_exists( 'tilfy_diag_log' ) ) {
			tilfy_diag_log( 'galeri shortcode: ' . $e->getMessage() . ' @ ' . $e->getFile() . ':' . $e->getLine() );
		}
		if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
			return '<p class="tilfy-galeri-hata">Tilfy galeri hatası.</p>';
		}
		return '';
	}
}

function tilfy_galeri_kisa_kod_render_icerik( $atts, $platform_sabit ) {
	tilfy_galeri_on_yuz_isaretle();
	$atts = shortcode_atts(
		array(
			'limit' => '',
			'sira'  => '',
			'medya' => '',
		),
		(array) $atts,
		'tilfy-galeri'
	);
	$platformlar = tilfy_galeri_kisa_kod_platformlar( $platform_sabit );
	if ( empty( $platformlar ) ) {
		return '';
	}
	$limit = $atts['limit'] !== '' ? max( 10, (int) $atts['limit'] ) : tilfy_galeri_sayfa_basina();
	$sira  = $atts['sira'] !== '' ? sanitize_key( (string) $atts['sira'] ) : tilfy_galeri_varsayilan_sira();
	$sira  = $sira === 'eski' ? 'eski' : 'yeni';
	$medya = sanitize_key( (string) $atts['medya'] );
	$medya_grup = '';
	if ( in_array( $medya, array( 'gorsel', 'video' ), true ) ) {
		$medya_grup = $medya;
	}
	$liste_args = array(
		'platformlar' => $platformlar,
		'per_page'    => $limit,
		'sira'        => $sira,
		'medya_grup'  => $medya_grup,
		'gizli_dahil' => tilfy_galeri_gizli_goster_mi(),
	);
	$sayfa = 1;
	if ( isset( $_GET['tg_page'] ) ) {
		$sayfa = max( 1, (int) wp_unslash( $_GET['tg_page'] ) );
	}
	$toplam       = tilfy_galeri_icerik_say( $liste_args );
	$sayfa_sayisi = max( 1, (int) ceil( $toplam / $limit ) );
	if ( $sayfa > $sayfa_sayisi ) {
		$sayfa = $sayfa_sayisi;
	}
	$liste_args['page'] = $sayfa;
	$icerikler          = tilfy_galeri_icerik_listele( $liste_args );
	$instance           = 'tilfy-galeri-' . wp_generate_password( 8, false, false );
	tilfy_galeri_varliklari_yukle();
	ob_start();
	require TILFY_YOL . 'includes/sayfalar/partials/galeri-on-yuz.php';
	tilfy_galeri_modal_yazdir();
	return (string) ob_get_clean();
}

function tilfy_galeri_kisa_kod_platformlar( $platform_sabit ) {
	$platform_sabit = sanitize_key( (string) $platform_sabit );
	if ( $platform_sabit === 'tumu' ) {
		$secili = tilfy_galeri_platformlar_al();
		return ! empty( $secili ) ? $secili : tilfy_galeri_varsayilan_platformlar();
	}
	if ( $platform_sabit === '' || ! function_exists( 'tilfy_platform_kaynak_mi' ) || ! tilfy_platform_kaynak_mi( $platform_sabit ) ) {
		return array();
	}
	return array( $platform_sabit );
}

function tilfy_galeri_icerik_listele( $args = array() ) {
	$args = wp_parse_args(
		is_array( $args ) ? $args : array(),
		array(
			'platformlar' => array(),
			'per_page'    => tilfy_galeri_sayfa_basina(),
			'sira'        => tilfy_galeri_varsayilan_sira(),
			'medya_grup'  => '',
			'gizli_dahil' => false,
		)
	);
	$platformlar = array_values(
		array_filter(
			array_map( 'sanitize_key', (array) $args['platformlar'] ),
			function ( $pl ) {
				return $pl !== '' && function_exists( 'tilfy_platform_kaynak_mi' ) && tilfy_platform_kaynak_mi( $pl );
			}
		)
	);
	if ( empty( $platformlar ) ) {
		return array();
	}
	$liste_args = array(
		'page'        => max( 1, (int) ( $args['page'] ?? 1 ) ),
		'per_page'    => max( 10, (int) $args['per_page'] ),
		'sira'        => sanitize_key( (string) $args['sira'] ) === 'eski' ? 'eski' : 'yeni',
		'platformlar' => $platformlar,
		'gizli_dahil' => ! empty( $args['gizli_dahil'] ),
	);
	$medya_grup = sanitize_key( (string) $args['medya_grup'] );
	if ( in_array( $medya_grup, array( 'gorsel', 'video' ), true ) ) {
		$liste_args['medya_grup'] = $medya_grup;
	}
	$icerikler = tilfy_icerik_listele( $liste_args );
	$cikti     = array();
	foreach ( (array) $icerikler as $satir ) {
		if ( tilfy_galeri_icerik_gosterilebilir( $satir ) ) {
			$cikti[] = $satir;
		}
	}
	return $cikti;
}

function tilfy_galeri_icerik_say( $args = array() ) {
	$args = wp_parse_args(
		is_array( $args ) ? $args : array(),
		array(
			'platformlar' => array(),
			'per_page'    => tilfy_galeri_sayfa_basina(),
			'sira'        => tilfy_galeri_varsayilan_sira(),
			'medya_grup'  => '',
			'gizli_dahil' => false,
		)
	);
	$platformlar = array_values(
		array_filter(
			array_map( 'sanitize_key', (array) $args['platformlar'] ),
			function ( $pl ) {
				return $pl !== '' && function_exists( 'tilfy_platform_kaynak_mi' ) && tilfy_platform_kaynak_mi( $pl );
			}
		)
	);
	if ( empty( $platformlar ) ) {
		return 0;
	}
	$say_args = array(
		'platformlar' => $platformlar,
		'gizli_dahil' => ! empty( $args['gizli_dahil'] ),
	);
	$medya_grup = sanitize_key( (string) $args['medya_grup'] );
	if ( in_array( $medya_grup, array( 'gorsel', 'video' ), true ) ) {
		$say_args['medya_grup'] = $medya_grup;
	}
	return tilfy_icerik_say( $say_args );
}

function tilfy_galeri_sayfa_url( $sayfa ) {
	$sayfa = max( 1, (int) $sayfa );
	$url   = get_permalink();
	if ( ! $url ) {
		$url = home_url( '/' );
	}
	if ( $sayfa <= 1 ) {
		return remove_query_arg( 'tg_page', $url );
	}
	return add_query_arg( 'tg_page', $sayfa, $url );
}

function tilfy_galeri_icerik_gosterilebilir( $icerik ) {
	if ( ! is_object( $icerik ) ) {
		return false;
	}
	$platform = sanitize_key( (string) ( $icerik->kaynak_platform ?? '' ) );
	if ( $platform === '' || ! function_exists( 'tilfy_platform_kaynak_mi' ) || ! tilfy_platform_kaynak_mi( $platform ) ) {
		return false;
	}
	if ( ! tilfy_galeri_gizli_goster_mi() && sanitize_key( (string) ( $icerik->durum ?? '' ) ) === 'gizli' ) {
		return false;
	}
	if ( $platform === 'wordpress' && ! tilfy_galeri_wp_ozel_goster_mi() ) {
		$kaynak_id = (int) ( $icerik->kaynak_id ?? 0 );
		if ( $kaynak_id > 0 ) {
			$post = get_post( $kaynak_id );
			if ( ! $post || $post->post_status !== 'publish' ) {
				return false;
			}
		}
	}
	return true;
}

function tilfy_galeri_icerik_token( $icerik_id ) {
	return hash_hmac( 'sha256', (string) (int) $icerik_id, wp_salt( 'tilfy_galeri' ) );
}

function tilfy_galeri_icerik_token_dogrula( $icerik_id, $token ) {
	$token = (string) $token;
	if ( $token === '' ) {
		return false;
	}
	return hash_equals( tilfy_galeri_icerik_token( $icerik_id ), $token );
}

function tilfy_galeri_icerik_satir_verisi( $icerik ) {
	if ( ! is_object( $icerik ) || ! tilfy_galeri_icerik_gosterilebilir( $icerik ) ) {
		return null;
	}
	$icerik_id     = (int) $icerik->id;
	$tarih_ham     = ! empty( $icerik->kaynak_tarihi ) ? $icerik->kaynak_tarihi : $icerik->olusturulma;
	$baslik        = $icerik->baslik ?: wp_trim_words( wp_strip_all_tags( (string) $icerik->aciklama ), 12, '…' );
	$platform      = sanitize_key( (string) $icerik->kaynak_platform );
	$medya_grup_k  = function_exists( 'tilfy_icerik_medya_grup' ) ? tilfy_icerik_medya_grup( $icerik->medya_tipi ) : 'video';
	$medya_etiket  = function_exists( 'tilfy_icerik_medya_grup_etiket' ) ? tilfy_icerik_medya_grup_etiket( $icerik->medya_tipi ) : ( $medya_grup_k === 'gorsel' ? 'Görsel' : 'Video' );
	$arama_metni   = strtolower( wp_strip_all_tags( $baslik . ' ' . (string) $icerik->aciklama ) );
	if ( function_exists( 'mb_substr' ) ) {
		$arama_metni = mb_substr( $arama_metni, 0, 2000 );
	} else {
		$arama_metni = substr( $arama_metni, 0, 2000 );
	}
	$tarih_ts     = $tarih_ham ? (int) strtotime( (string) $tarih_ham ) : 0;
	$tarih_goster = '';
	$tarih_gun    = '';
	if ( $tarih_ham && $tarih_ts > 0 ) {
		$tarih_goster = mysql2date( 'd.m.Y H:i', $tarih_ham );
		$tarih_gun    = mysql2date( 'Y-m-d', $tarih_ham );
	}
	return array(
		'id'             => $icerik_id,
		'token'          => tilfy_galeri_icerik_token( $icerik_id ),
		'baslik'         => $baslik,
		'platform'       => $platform,
		'platform_etiket'=> function_exists( 'tilfy_platform_etiket' ) ? tilfy_platform_etiket( $platform ) : $platform,
		'medya_grup'     => $medya_grup_k,
		'medya_etiket'   => $medya_etiket,
		'tarih'          => $tarih_goster,
		'tarih_gun'      => $tarih_gun,
		'tarih_ts'       => $tarih_ts,
		'arama'          => $arama_metni,
	);
}

function tilfy_galeri_icerik_modal_verisi( $icerik ) {
	$satir = tilfy_galeri_icerik_satir_verisi( $icerik );
	if ( ! $satir ) {
		return null;
	}
	$aciklama_modu = tilfy_galeri_modal_aciklama_modu();
	$aciklama      = '';
	if ( $aciklama_modu !== '0' ) {
		$kelime = $aciklama_modu === '2' ? 40 : 12;
		$aciklama = wp_trim_words( wp_strip_all_tags( (string) $icerik->aciklama ), $kelime, '…' );
	}
	$kapak = '';
	if ( tilfy_galeri_modal_kapak_mi() ) {
		$kapak = function_exists( 'tilfy_icerik_kapak_url_al' ) ? tilfy_icerik_kapak_url_al( $icerik ) : ( (string) ( $icerik->kapak_url ?: $icerik->medya_url ) );
	}
	$istatistik = null;
	if ( tilfy_galeri_istatistik_goster_mi() && function_exists( 'tilfy_icerik_istatistik_al' ) ) {
		$ist = tilfy_icerik_istatistik_al( (int) $icerik->id );
		$ist_satir = $ist[0] ?? null;
		if ( $ist_satir ) {
			$istatistik = array(
				'goruntulenme' => (int) $ist_satir->goruntulenme,
				'begeni'       => (int) $ist_satir->begeni,
				'yorum'        => (int) $ist_satir->yorum,
			);
		}
	}
	return array_merge(
		$satir,
		array(
			'aciklama'    => $aciklama,
			'kapak'       => esc_url_raw( (string) $kapak ),
			'kaynak_url'  => function_exists( 'tilfy_icerik_kaynak_url' ) ? tilfy_icerik_kaynak_url( $icerik ) : '',
			'buton_metni' => tilfy_galeri_buton_metni(),
			'istatistik'  => $istatistik,
		)
	);
}

function tilfy_galeri_on_yuz_isaretle() {
	$GLOBALS['tilfy_galeri_on_yuz'] = true;
}

function tilfy_galeri_sayfada_mi() {
	if ( ! empty( $GLOBALS['tilfy_galeri_on_yuz'] ) ) {
		return true;
	}
	$post = get_post();
	if ( ! $post || empty( $post->post_content ) ) {
		return false;
	}
	foreach ( array_keys( tilfy_galeri_kisa_kod_etiketleri() ) as $etiket ) {
		if ( has_shortcode( $post->post_content, $etiket ) ) {
			return true;
		}
	}
	return false;
}

function tilfy_galeri_varliklari_kuyruk() {
	if ( ! tilfy_galeri_sayfada_mi() ) {
		return;
	}
	tilfy_galeri_varliklari_yukle();
}

function tilfy_galeri_varliklari_yukle() {
	if ( ! function_exists( 'tilfy_galeri_etkin_mi' ) || ! tilfy_galeri_etkin_mi() ) {
		return;
	}
	if ( ! wp_style_is( 'tilfy-galeri', 'enqueued' ) && ! wp_style_is( 'tilfy-galeri', 'done' ) ) {
		wp_enqueue_style( 'tilfy-galeri', TILFY_URL . 'assets/galeri.css', array(), tilfy_galeri_dosya_surum( 'assets/galeri.css' ) );
	}
	if ( wp_script_is( 'tilfy-galeri', 'enqueued' ) || wp_script_is( 'tilfy-galeri', 'done' ) ) {
		return;
	}
	wp_enqueue_script( 'tilfy-galeri', TILFY_URL . 'assets/galeri.js', array(), tilfy_galeri_dosya_surum( 'assets/galeri.js' ), true );
	wp_localize_script(
		'tilfy-galeri',
		'tilfyGaleri',
		array(
			'restUrl'   => esc_url_raw( rest_url( 'tilfy/v1/galeri/icerik' ) ),
			'lazyModal' => tilfy_galeri_modal_lazy_mi() ? '1' : '0',
			'strings'   => array(
				'bos'    => tilfy__( 'Sonuç bulunamadı.' ),
				'yuklen' => tilfy__( 'Yükleniyor…' ),
				'hata'   => tilfy__( 'İçerik yüklenemedi.' ),
				'views'  => tilfy__( 'görüntülenme' ),
				'likes'  => tilfy__( 'beğeni' ),
				'comments' => tilfy__( 'yorum' ),
			),
		)
	);
}

function tilfy_galeri_dosya_surum( $goreli_yol ) {
	$dosya = TILFY_YOL . ltrim( (string) $goreli_yol, '/' );
	if ( is_readable( $dosya ) ) {
		return TILFY_SURUM . '.' . filemtime( $dosya );
	}
	return defined( 'TILFY_SURUM' ) ? TILFY_SURUM : '1';
}

function tilfy_galeri_icerik_idden( $icerik_id ) {
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return null;
	}
	$liste = tilfy_icerik_idlerden( array( $icerik_id ) );
	return $liste[0] ?? null;
}

function tilfy_galeri_modal_yazdir() {
	if ( empty( $GLOBALS['tilfy_galeri_on_yuz'] ) ) {
		return;
	}
	static $yazildi = false;
	if ( $yazildi ) {
		return;
	}
	$yazildi = true;
	require TILFY_YOL . 'includes/sayfalar/partials/galeri-modal.php';
}
