<?php

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

function tilfy_kuyruk_arka_plan_tetik() {
	if ( wp_doing_cron() ) {
		return;
	}
	if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON && function_exists( 'tilfy_kuyruk_loopback_tetik' ) ) {
		tilfy_kuyruk_loopback_tetik();
		return;
	}
	if ( ! wp_next_scheduled( 'tilfy_kuyruk_isle' ) ) {
		wp_schedule_single_event( time() + 2, 'tilfy_kuyruk_isle' );
	}
	if ( function_exists( 'spawn_cron' ) ) {
		spawn_cron( true );
	}
	$cron_url = add_query_arg(
		'doing_wp_cron',
		rawurlencode( sprintf( '%.22F', microtime( true ) ) ),
		site_url( 'wp-cron.php' )
	);
	wp_remote_post(
		$cron_url,
		array(
			'timeout'   => 0.01,
			'blocking'  => false,
			'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
			'headers'   => array(
				'Cache-Control' => 'no-cache',
			),
		)
	);
}

function tilfy_kuyruk_loopback_token_al() {
	$token = (string) get_option( 'tilfy_kuyruk_loopback_token', '' );
	if ( $token === '' && function_exists( 'tilfy_kapak_loopback_token_al' ) ) {
		$token = tilfy_kapak_loopback_token_al();
	}
	if ( $token === '' ) {
		$token = wp_generate_password( 32, false );
		update_option( 'tilfy_kuyruk_loopback_token', $token, false );
	}
	return $token;
}

function tilfy_kuyruk_loopback_imza_olustur( $exp, $adim ) {
	$exp  = (int) $exp;
	$adim = (int) $adim;
	return hash_hmac( 'sha256', 'kuyruk|' . $exp . '|' . $adim, tilfy_kuyruk_loopback_token_al() );
}

function tilfy_kuyruk_loopback_gerekli_mi() {
	if ( function_exists( 'tilfy_kuyruk_duraklatildi_mi' ) && tilfy_kuyruk_duraklatildi_mi() ) {
		return false;
	}
	$bekleyen = function_exists( 'tilfy_kuyruk_bekleyen_say' ) ? tilfy_kuyruk_bekleyen_say() : 0;
	if ( $bekleyen > 0 ) {
		return true;
	}
	if ( function_exists( 'tilfy_zamanlanmis_paylasim_gecikmis_say' ) && tilfy_zamanlanmis_paylasim_gecikmis_say() > 0 ) {
		return true;
	}
	return false;
}

function tilfy_kuyruk_loopback_tetik() {
	if ( ! tilfy_kuyruk_loopback_gerekli_mi() ) {
		return;
	}
	$bekliyor = get_transient( 'tilfy_kuyruk_loopback_bekliyor' );
	if ( $bekliyor && ( time() - (int) $bekliyor ) < 45 ) {
		return;
	}
	set_transient( 'tilfy_kuyruk_loopback_bekliyor', (string) time(), 120 );
	$adim = function_exists( 'tilfy_kuyruk_adim_limiti' ) ? tilfy_kuyruk_adim_limiti() : 8;
	$exp  = time() + 120;
	$sig  = tilfy_kuyruk_loopback_imza_olustur( $exp, $adim );
	wp_remote_post(
		admin_url( 'admin-ajax.php' ),
		array(
			'timeout'   => 0.01,
			'blocking'  => false,
			'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
			'headers'   => array(
				'Cache-Control' => 'no-cache',
			),
			'body'      => array(
				'action' => 'tilfy_kuyruk_loopback',
				'exp'    => $exp,
				'adim'   => $adim,
				'sig'    => $sig,
			),
		)
	);
}

function tilfy_kuyruk_loopback_islem() {
	if ( function_exists( 'tilfy_yerel_loopback_izinli' ) && ! tilfy_yerel_loopback_izinli() ) {
		status_header( 403 );
		wp_die( '403', '', array( 'response' => 403 ) );
	}
	$exp   = (int) ( $_REQUEST['exp'] ?? 0 );
	$adim  = max( 1, min( 12, (int) ( $_REQUEST['adim'] ?? 8 ) ) );
	$sig   = sanitize_text_field( wp_unslash( $_REQUEST['sig'] ?? '' ) );
	$simdi = time();
	if ( $exp < $simdi || $exp > ( $simdi + 300 ) || $sig === '' ) {
		status_header( 403 );
		wp_die( '403', '', array( 'response' => 403 ) );
	}
	$beklenen = tilfy_kuyruk_loopback_imza_olustur( $exp, $adim );
	if ( ! hash_equals( $beklenen, $sig ) ) {
		status_header( 403 );
		wp_die( '403', '', array( 'response' => 403 ) );
	}
	@ignore_user_abort( true );
	@set_time_limit( 180 );
	if ( function_exists( 'fastcgi_finish_request' ) ) {
		header( 'Content-Type: text/plain; charset=utf-8' );
		echo 'ok';
		fastcgi_finish_request();
	}
	if ( function_exists( 'tilfy_kuyruk_hazirlik' ) ) {
		tilfy_kuyruk_hazirlik();
	} elseif ( function_exists( 'tilfy_kuyruk_takili_serbest_birak' ) ) {
		tilfy_kuyruk_takili_serbest_birak();
	}
	$islenen = 0;
	for ( $i = 0; $i < $adim; $i++ ) {
		if ( ! function_exists( 'tilfy_kuyruk_tek_adim_inner' ) || ! tilfy_kuyruk_tek_adim_inner() ) {
			break;
		}
		++$islenen;
	}
	if ( function_exists( 'tilfy_otomasyon_dongu' ) ) {
		tilfy_otomasyon_dongu();
	}
	if ( function_exists( 'tilfy_otomasyon_batch_sirali_tum_kontrol' ) ) {
		tilfy_otomasyon_batch_sirali_tum_kontrol();
	}
	if ( tilfy_kuyruk_loopback_gerekli_mi() ) {
		if ( $islenen > 0 ) {
			tilfy_kuyruk_loopback_tetik();
		} else {
			if ( function_exists( 'tilfy_kuyruk_takili_serbest_birak' ) ) {
				tilfy_kuyruk_takili_serbest_birak();
			}
			sleep( 2 );
			if ( function_exists( 'tilfy_kuyruk_tek_adim_inner' ) && tilfy_kuyruk_tek_adim_inner() ) {
				tilfy_kuyruk_loopback_tetik();
			} elseif ( ! wp_next_scheduled( 'tilfy_kuyruk_isle' ) ) {
				wp_schedule_single_event( time() + 45, 'tilfy_kuyruk_isle' );
				if ( function_exists( 'spawn_cron' ) ) {
					spawn_cron( true );
				}
				tilfy_kuyruk_loopback_tetik();
			}
		}
	} else {
		delete_transient( 'tilfy_kuyruk_loopback_bekliyor' );
	}
	wp_die( 'ok' );
}

function tilfy_kuyruk_medya_indir_aktif_mi() {
	global $wpdb;
	return (int) $wpdb->get_var(
		"SELECT COUNT(*) FROM " . tilfy_tablo( 'kuyruk' ) . " WHERE islem = 'medya_indir' AND durum = 'calisiyor'"
	) > 0;
}

function tilfy_kuyruk_islem_bekleyen_say( $islemler ) {
	global $wpdb;
	$liste = array_values( array_filter( array_map( 'sanitize_key', (array) $islemler ) ) );
	if ( empty( $liste ) ) {
		return 0;
	}
	$yer_tutucular = implode( ',', array_fill( 0, count( $liste ), '%s' ) );
	return (int) $wpdb->get_var(
		$wpdb->prepare(
			"SELECT COUNT(*) FROM " . tilfy_tablo( 'kuyruk' ) . " WHERE durum IN ('beklemede','calisiyor') AND islem IN ({$yer_tutucular})",
			$liste
		)
	);
}

function tilfy_kuyruk_senkron_bekleyen_say() {
	return tilfy_kuyruk_islem_bekleyen_say( array( 'icerik_cek', 'istatistik_sync', 'tumu_senkron' ) );
}

function tilfy_kuyruk_medya_bekleyen_say() {
	return tilfy_kuyruk_islem_bekleyen_say( array( 'medya_indir' ) );
}

function tilfy_paylasim_takili_yukleniyor_serbest_birak( $dakika = 10 ) {
	global $wpdb;
	$dakika = max( 3, (int) $dakika );
	$simdi  = current_time( 'mysql' );
	$esik   = wp_date( 'Y-m-d H:i:s', (int) current_time( 'timestamp' ) - ( $dakika * 60 ) );
	$pt     = tilfy_tablo( 'paylasim' );
	$kt     = tilfy_tablo( 'kuyruk' );
	$satirlar = $wpdb->get_results(
		"SELECT id, icerik_id, guncelleme FROM {$pt} WHERE durum = 'yukleniyor'"
	);
	foreach ( (array) $satirlar as $paylasim ) {
		$paylasim_id = (int) $paylasim->id;
		$icerik_id   = (int) $paylasim->icerik_id;
		$kuyruk_var = 0;
		if ( function_exists( 'tilfy_kuyruk_paylasim_bekliyor_mu' ) ) {
			$kuyruk_var = tilfy_kuyruk_paylasim_bekliyor_mu( $paylasim_id ) ? 1 : 0;
		} else {
			$kuyruk_satirlar = $wpdb->get_results(
				"SELECT payload FROM {$kt} WHERE islem = 'paylasim_gonder' AND durum IN ('beklemede','calisiyor')"
			);
			foreach ( (array) $kuyruk_satirlar as $ks ) {
				$kp = json_decode( (string) $ks->payload, true );
				if ( is_array( $kp ) && (int) ( $kp['paylasim_id'] ?? 0 ) === $paylasim_id ) {
					$kuyruk_var = 1;
					break;
				}
			}
		}
		if ( $kuyruk_var > 0 ) {
			continue;
		}
		$medya_bekliyor = $icerik_id > 0 && function_exists( 'tilfy_icerik_medya_indirme_bekliyor_mu' ) && tilfy_icerik_medya_indirme_bekliyor_mu( $icerik_id );
		$eski           = (string) ( $paylasim->guncelleme ?? '' ) < $esik;
		if ( $medya_bekliyor || $eski ) {
			$wpdb->update(
				$pt,
				array(
					'durum'      => 'beklemede',
					'guncelleme' => $simdi,
				),
				array( 'id' => $paylasim_id )
			);
			if ( function_exists( 'tilfy_islem_log' ) ) {
				tilfy_islem_log(
					'diag',
					'paylasim yukleniyor sifirlandi (medya/kuyruk yok)',
					array( 'paylasim_id' => $paylasim_id, 'icerik_id' => $icerik_id )
				);
			}
		}
	}
}

function tilfy_kuyruk_medya_takili_serbest_birak( $saniye = 90 ) {
	global $wpdb;
	$saniye = max( 45, (int) $saniye );
	$simdi  = current_time( 'mysql' );
	$esik   = wp_date( 'Y-m-d H:i:s', (int) current_time( 'timestamp' ) - $saniye );
	$wpdb->query(
		$wpdb->prepare(
			"UPDATE " . tilfy_tablo( 'kuyruk' ) . " SET durum = 'beklemede', guncelleme = %s WHERE durum = 'calisiyor' AND islem = 'medya_indir' AND guncelleme < %s",
			$simdi,
			$esik
		)
	);
}

function tilfy_kuyruk_kapak_takili_serbest_birak( $saniye = 90 ) {
	global $wpdb;
	$saniye = max( 45, (int) $saniye );
	$simdi  = current_time( 'mysql' );
	$esik   = wp_date( 'Y-m-d H:i:s', (int) current_time( 'timestamp' ) - $saniye );
	$wpdb->query(
		$wpdb->prepare(
			"UPDATE " . tilfy_tablo( 'kuyruk' ) . " SET durum = 'beklemede', guncelleme = %s WHERE durum = 'calisiyor' AND islem = 'kapak_tara' AND guncelleme < %s",
			$simdi,
			$esik
		)
	);
}

function tilfy_kuyruk_takili_serbest_birak( $dakika = 12 ) {
	if ( function_exists( 'tilfy_paylasim_takili_yukleniyor_serbest_birak' ) ) {
		tilfy_paylasim_takili_yukleniyor_serbest_birak( $dakika );
	}
	if ( function_exists( 'tilfy_kuyruk_medya_takili_serbest_birak' ) ) {
		tilfy_kuyruk_medya_takili_serbest_birak();
	}
	if ( function_exists( 'tilfy_kuyruk_kapak_takili_serbest_birak' ) ) {
		tilfy_kuyruk_kapak_takili_serbest_birak();
	}
	global $wpdb;
	$dakika = max( 5, (int) $dakika );
	$simdi  = current_time( 'mysql' );
	$simdi_ts = (int) current_time( 'timestamp' );
	$esik   = wp_date( 'Y-m-d H:i:s', $simdi_ts - ( $dakika * 60 ) );
	$wpdb->query(
		$wpdb->prepare(
			"UPDATE " . tilfy_tablo( 'kuyruk' ) . " SET durum = 'beklemede', guncelleme = %s WHERE durum = 'calisiyor' AND guncelleme < %s",
			$simdi,
			$esik
		)
	);
}

function tilfy_kuyruk_islem_yuzde( $islem, $durum, $guncelleme = '' ) {
	$islem = sanitize_key( (string) $islem );
	$durum = sanitize_key( (string) $durum );
	if ( $durum === 'beklemede' && tilfy_yerel_mysql_ts( (string) $guncelleme ) > time() ) {
		return 4;
	}
	if ( $durum === 'beklemede' ) {
		return 4;
	}
	if ( $durum !== 'calisiyor' ) {
		return 0;
	}
	if ( $islem === 'medya_indir' ) {
		$gunc_ts = function_exists( 'tilfy_yerel_mysql_ts' ) ? tilfy_yerel_mysql_ts( (string) $guncelleme ) : 0;
		if ( $gunc_ts > 0 ) {
			$gecen = max( 0, time() - $gunc_ts );
			return min( 96, 8 + (int) round( ( $gecen / 300 ) * 88 ) );
		}
		return 12;
	}
	if ( $islem === 'paylasim_gonder' ) {
		return 62;
	}
	if ( $islem === 'icerik_cek' ) {
		return 48;
	}
	if ( $islem === 'youtube_sonrasi' ) {
		return 72;
	}
	return 36;
}
function tilfy_kuyruk_devam_et( $adim = 8 ) {
	tilfy_kuyruk_duraklat_set( false );
	if ( function_exists( 'tilfy_kuyruk_takili_serbest_birak' ) ) {
		tilfy_kuyruk_takili_serbest_birak();
	}
	if ( function_exists( 'tilfy_kuyruk_bekleyen_tamamla' ) ) {
		tilfy_kuyruk_bekleyen_tamamla();
	}
	$medya_eklenen = function_exists( 'tilfy_kuyruk_medya_eksik_kuyruga_al' ) ? tilfy_kuyruk_medya_eksik_kuyruga_al() : 0;
	$adim          = max( 1, min( 12, (int) $adim ) );
	$islenen       = 0;
	for ( $i = 0; $i < $adim; $i++ ) {
		if ( ! function_exists( 'tilfy_kuyruk_tek_adim_inner' ) || ! tilfy_kuyruk_tek_adim_inner() ) {
			break;
		}
		++$islenen;
	}
	if ( function_exists( 'tilfy_kuyruk_arka_plan_tetik' ) ) {
		tilfy_kuyruk_arka_plan_tetik();
	}
	return array(
		'duraklatildi'  => tilfy_kuyruk_duraklatildi_mi(),
		'bekleyen'      => tilfy_kuyruk_bekleyen_say(),
		'medya_eklenen' => $medya_eklenen,
		'islenen'       => $islenen,
	);
}

function tilfy_aktivite_icerik_baslik( $icerik ) {
	if ( ! $icerik ) {
		return '';
	}
	$baslik = trim( (string) ( $icerik->baslik ?? '' ) );
	if ( $baslik !== '' ) {
		return $baslik;
	}
	$aciklama = trim( wp_strip_all_tags( (string) ( $icerik->aciklama ?? '' ) ) );
	if ( $aciklama !== '' ) {
		$aciklama = preg_replace( '/\s+/u', ' ', $aciklama );
		if ( function_exists( 'mb_strlen' ) && mb_strlen( $aciklama ) > 90 ) {
			return mb_substr( $aciklama, 0, 88 ) . '…';
		}
		if ( strlen( $aciklama ) > 90 ) {
			return substr( $aciklama, 0, 88 ) . '…';
		}
		return $aciklama;
	}
	$kaynak_id = trim( (string) ( $icerik->kaynak_id ?? '' ) );
	if ( $kaynak_id !== '' ) {
		$pl = tilfy_aktivite_platform_etiket( $icerik->kaynak_platform ?? '' );
		return ( $pl !== '' ? $pl . ' · ' : '' ) . $kaynak_id;
	}
	return 'İçerik #' . (int) $icerik->id;
}

function tilfy_aktivite_icerik_ekstra( $icerik ) {
	if ( ! $icerik ) {
		return array(
			'kapak_url'   => '',
			'kaynak_url'  => '',
			'indirme_url' => '',
			'kaynak_id'   => '',
			'aciklama'    => '',
			'aciklama_kisa' => '',
		);
	}
	$kapak = function_exists( 'tilfy_icerik_kapak_url_al' ) ? tilfy_icerik_kapak_url_al( $icerik ) : esc_url_raw( (string) ( $icerik->kapak_url ?? '' ) );
	if ( $kapak === '' ) {
		$medya = esc_url_raw( (string) ( $icerik->medya_url ?? '' ) );
		if ( $medya !== '' && preg_match( '/\.(jpe?g|png|gif|webp)(\?|$)/i', $medya ) ) {
			$kapak = $medya;
		}
	}
	$kaynak_url = function_exists( 'tilfy_icerik_kaynak_url' ) ? tilfy_icerik_kaynak_url( $icerik ) : esc_url_raw( (string) ( $icerik->kaynak_url ?? '' ) );
	$indirme    = '';
	$yerel_id   = (int) ( $icerik->medya_dosya_id ?? 0 );
	$yerel_yanlis = $yerel_id > 0 && function_exists( 'tilfy_icerik_video_icin_gorsel_dosya_mi' ) && tilfy_icerik_video_icin_gorsel_dosya_mi( $icerik, $yerel_id );
	if ( $yerel_id > 0 && ! $yerel_yanlis ) {
		$dosya_url = wp_get_attachment_url( $yerel_id );
		if ( is_string( $dosya_url ) && $dosya_url !== '' ) {
			$indirme = esc_url_raw( $dosya_url );
		}
	}
	if ( $indirme === '' && function_exists( 'tilfy_icerik_meta_uzaktan_medya_mi' ) && tilfy_icerik_meta_uzaktan_medya_mi( $icerik ) ) {
		$indirme = function_exists( 'tilfy_icerik_son_api_medya_url_al' )
			? tilfy_icerik_son_api_medya_url_al( (int) $icerik->id )
			: '';
		if ( $indirme === '' && function_exists( 'tilfy_kuyruk_icerik_indirme_url_al' ) ) {
			$indirme = tilfy_kuyruk_icerik_indirme_url_al( (int) $icerik->id );
		}
	} elseif ( $indirme === '' ) {
		$indirme = esc_url_raw( (string) ( $icerik->medya_url ?? '' ) );
	}
	$aciklama   = trim( wp_strip_all_tags( (string) ( $icerik->aciklama ?? '' ) ) );
	$aciklama_kisa = $aciklama;
	if ( $aciklama_kisa !== '' ) {
		$aciklama_kisa = preg_replace( '/\s+/u', ' ', $aciklama_kisa );
		if ( function_exists( 'mb_strlen' ) && mb_strlen( $aciklama_kisa ) > 140 ) {
			$aciklama_kisa = mb_substr( $aciklama_kisa, 0, 138 ) . '…';
		} elseif ( strlen( $aciklama_kisa ) > 140 ) {
			$aciklama_kisa = substr( $aciklama_kisa, 0, 138 ) . '…';
		}
	}
	return array(
		'kapak_url'       => $kapak,
		'kaynak_url'      => $kaynak_url,
		'indirme_url'     => $indirme,
		'kaynak_id'       => sanitize_text_field( (string) ( $icerik->kaynak_id ?? '' ) ),
		'aciklama'        => $aciklama,
		'aciklama_kisa'   => $aciklama_kisa,
	);
}

function tilfy_aktivite_platform_etiket( $platform ) {
	$platform = sanitize_key( (string) $platform );
	if ( $platform === '' ) {
		return '';
	}
	return function_exists( 'tilfy_platform_etiket' ) ? tilfy_platform_etiket( $platform ) : $platform;
}

function tilfy_aktivite_medya_etiket( $medya_tipi ) {
	$medya_tipi = sanitize_key( (string) $medya_tipi );
	if ( $medya_tipi === 'gorsel' ) {
		return 'image';
	}
	if ( $medya_tipi === 'video' ) {
		return 'video';
	}
	return 'media';
}

function tilfy_kuyruk_durum_etiket( $durum ) {
	$durum = sanitize_key( (string) $durum );
	$etiketler = array(
		'beklemede'  => 'Waiting',
		'calisiyor'  => 'Running',
		'yukleniyor' => 'Uploading',
		'zamanlandi' => 'Scheduled',
		'sirada'     => 'Queued',
	);
	return $etiketler[ $durum ] ?? $durum;
}

function tilfy_kuyruk_bekleme_erteleme_bilgi( $durum, $guncelleme ) {
	$durum = sanitize_key( (string) $durum );
	if ( $durum !== 'beklemede' ) {
		return array(
			'bekleme_erteleme'       => false,
			'bekleme_erteleme_etiket'=> '',
		);
	}
	$ts = tilfy_yerel_mysql_ts( (string) $guncelleme );
	if ( $ts <= time() ) {
		return array(
			'bekleme_erteleme'       => false,
			'bekleme_erteleme_etiket'=> '',
		);
	}
	$kalan = max( 1, (int) ceil( ( $ts - time() ) / 60 ) );
	return array(
		'bekleme_erteleme'        => true,
		'bekleme_erteleme_etiket' => sprintf( 'in %d min', $kalan ),
	);
}

function tilfy_kuyruk_islem_ozet_metin( $islem, $calisiyor, $erteleme = false, $erteleme_etiket = '' ) {
	$islem = sanitize_key( (string) $islem );
	if ( $erteleme && $erteleme_etiket !== '' ) {
		return 'CDN wait · ' . $erteleme_etiket;
	}
	if ( $islem === 'medya_indir' ) {
		return $calisiyor ? 'Downloading media' : 'Media download queued';
	}
	if ( $islem === 'paylasim_gonder' ) {
		return $calisiyor ? 'Uploading to platform' : 'Upload queued';
	}
	if ( $islem === 'youtube_sonrasi' ) {
		return $calisiyor ? 'YouTube post-processing' : 'YouTube post-processing queued';
	}
	if ( $islem === 'icerik_cek' ) {
		return $calisiyor ? 'Content sync' : 'Sync queued';
	}
	if ( $islem === 'istatistik_sync' ) {
		return $calisiyor ? 'Updating stats' : 'Stats update queued';
	}
	if ( $islem === 'tumu_senkron' ) {
		return $calisiyor ? 'Bulk sync' : 'Bulk sync queued';
	}
	if ( $islem === 'otomasyon_kontrol' ) {
		return $calisiyor ? 'Automation check' : 'Automation queued';
	}
	return $calisiyor ? 'Running' : 'Queued';
}

function tilfy_kuyruk_islem_detay_olustur( $islem, $durum, $payload, $icerik = null, $paylasim = null ) {
	$islem    = sanitize_key( (string) $islem );
	$durum    = sanitize_key( (string) $durum );
	$payload  = is_array( $payload ) ? $payload : array();
	$calisiyor = $durum === 'calisiyor';

	$baslik = tilfy_aktivite_icerik_baslik( $icerik );
	$kaynak = $icerik ? tilfy_aktivite_platform_etiket( $icerik->kaynak_platform ?? '' ) : '';
	$hedef_pl = sanitize_key( (string) ( $payload['platform'] ?? ( $paylasim ? $paylasim->hedef_platform : '' ) ) );
	$hedef    = tilfy_aktivite_platform_etiket( $hedef_pl );
	$medya    = $icerik ? tilfy_aktivite_medya_etiket( $icerik->medya_tipi ?? '' ) : 'medya';
	$yol      = '';
	if ( $kaynak !== '' && $hedef !== '' ) {
		$yol = $kaynak . ' → ' . $hedef;
	} elseif ( $hedef !== '' ) {
		$yol = '→ ' . $hedef;
	} elseif ( $kaynak !== '' ) {
		$yol = $kaynak;
	}

	$tur         = tilfy_kuyruk_islem_etiket( $islem, $payload );
	$detay       = '';
	$indirme_url = '';

	switch ( $islem ) {
		case 'medya_indir':
			$tur = 'Media download';
			$indirme_url = $icerik ? esc_url_raw( (string) ( $icerik->medya_url ?? '' ) ) : '';
			if ( $icerik && function_exists( 'tilfy_icerik_meta_uzaktan_medya_mi' ) && tilfy_icerik_meta_uzaktan_medya_mi( $icerik ) ) {
				$indirme_url = function_exists( 'tilfy_icerik_son_api_medya_url_al' )
					? tilfy_icerik_son_api_medya_url_al( (int) $icerik->id )
					: '';
				if ( $indirme_url === '' && function_exists( 'tilfy_kuyruk_icerik_indirme_url_al' ) ) {
					$indirme_url = tilfy_kuyruk_icerik_indirme_url_al( (int) $icerik->id );
				}
				if ( $indirme_url === '' && ! empty( $payload['indirme_url'] ) ) {
					$indirme_url = esc_url_raw( (string) $payload['indirme_url'] );
				}
			}
			if ( $baslik !== '' ) {
				$detay = sprintf( '"%s" - copying source %s from Instagram/CDN to the server.', $baslik, $medya );
			} else {
				$detay = sprintf( 'Copying source %s file to the server.', $medya );
			}
			if ( $indirme_url !== '' ) {
				$detay .= ' Download URL saved.';
			} elseif ( $icerik && function_exists( 'tilfy_icerik_meta_uzaktan_medya_mi' ) && tilfy_icerik_meta_uzaktan_medya_mi( $icerik ) ) {
				$detay .= ' URL will be fetched via Meta API at download time.';
			}
			if ( $calisiyor ) {
				$detay .= ' Downloading now.';
			} else {
				$detay .= ' Queued - must finish before share upload.';
			}
			break;
		case 'paylasim_gonder':
			$tur = 'Share upload';
			if ( $yol !== '' ) {
				$detay = sprintf( '"%s" - uploading %s to platform via %s.', $baslik, $medya, $yol );
			} else {
				$detay = sprintf( '"%s" - uploading %s to target platform.', $baslik, $medya );
			}
			if ( $calisiyor ) {
				$detay .= ' Upload active via API.';
			} else {
				$detay .= ' Waiting in queue (starts when media is ready).';
			}
			break;
		case 'youtube_sonrasi':
			$tur = 'YouTube post-processing';
			$detay = '"' . $baslik . '" - setting YouTube playlist / cover (legacy queue).';
			if ( $calisiyor ) {
				$detay .= ' Running now.';
			} else {
				$detay .= ' Will run after video upload completes.';
			}
			break;
		case 'icerik_cek':
			$tur = 'Content sync';
			$pl  = tilfy_aktivite_platform_etiket( (string) ( $payload['platform'] ?? '' ) );
			$detay = 'Fetching new content from ' . ( $pl !== '' ? $pl : 'platform' ) . ' account.';
			if ( $calisiyor ) {
				$detay .= ' Scanning list via API.';
			} else {
				$detay .= ' Waiting in queue.';
			}
			break;
		case 'tumu_senkron':
			$tur = 'Bulk sync';
			$detay = 'Syncing content from all connected platforms.';
			break;
		case 'istatistik_sync':
			$tur = 'Stats update';
			$pl  = tilfy_aktivite_platform_etiket( (string) ( $payload['platform'] ?? '' ) );
			$detay = 'Updating views / engagement for ' . ( $pl !== '' ? $pl : 'platform' ) . '.';
			break;
		case 'otomasyon_kontrol':
			$tur = 'Automation';
			$detay = 'Checking automation rules; new shares may be created.';
			break;
		default:
			$detay = $tur;
			if ( $calisiyor ) {
				$detay .= ' - running now.';
			} else {
				$detay .= ' - waiting in queue.';
			}
	}

	$ekstra = tilfy_aktivite_icerik_ekstra( $icerik );
	if ( $indirme_url !== '' ) {
		$ekstra['indirme_url'] = $indirme_url;
	}

	return array_merge(
		array(
			'tur'              => $tur,
			'durum_etiket'     => $calisiyor ? 'Running now' : 'Waiting in queue',
			'ozet'             => tilfy_kuyruk_islem_ozet_metin( $islem, $calisiyor ),
			'detay'            => $detay,
			'baslik'           => $baslik,
			'yol'              => $yol,
			'kaynak_platform'  => $icerik ? sanitize_key( (string) ( $icerik->kaynak_platform ?? '' ) ) : '',
			'hedef_platform'   => $hedef_pl,
			'medya_tipi'       => $icerik ? sanitize_key( (string) ( $icerik->medya_tipi ?? '' ) ) : '',
			'icerik_id'        => (int) ( $payload['icerik_id'] ?? ( $icerik ? (int) $icerik->id : 0 ) ),
			'paylasim_id'      => (int) ( $payload['paylasim_id'] ?? ( $paylasim ? (int) $paylasim->id : 0 ) ),
		),
		$ekstra
	);
}

function tilfy_paylasim_bekleme_detay_olustur( $paylasim, $icerik ) {
	$hedef   = tilfy_aktivite_platform_etiket( $paylasim->hedef_platform ?? '' );
	$kaynak  = tilfy_aktivite_platform_etiket( $icerik->kaynak_platform ?? '' );
	$baslik  = trim( (string) ( $paylasim->ozel_baslik ?? '' ) );
	if ( $baslik === '' ) {
		$baslik = tilfy_aktivite_icerik_baslik( $icerik );
	}
	$medya   = tilfy_aktivite_medya_etiket( $icerik->medya_tipi ?? '' );
	$yol     = ( $kaynak !== '' && $hedef !== '' ) ? ( $kaynak . ' → ' . $hedef ) : $hedef;
	$durum   = sanitize_key( (string) ( $paylasim->durum ?? '' ) );
	$detay   = '';

	if ( $durum === 'zamanlandi' ) {
		$zaman = trim( (string) ( $paylasim->zamanlama ?? '' ) );
		if ( $zaman !== '' ) {
			$detay = 'Scheduled share - will post to ' . $hedef . ' on ' . wp_date( 'j M Y, H:i', strtotime( $zaman ) ) . '.';
		} else {
			$detay = 'Scheduled share - will post to ' . $hedef . ' at the set time.';
		}
	} elseif ( $durum === 'yukleniyor' && function_exists( 'tilfy_icerik_medya_indirme_bekliyor_mu' ) && tilfy_icerik_medya_indirme_bekliyor_mu( (int) $icerik->id ) ) {
		$detay = '"' . $baslik . '" - source ' . $medya . ' must download first; ' . $hedef . ' upload has not started yet.';
	} elseif ( $durum === 'yukleniyor' ) {
		$detay = '"' . $baslik . '" - uploading ' . $medya . ' to ' . $hedef . ' now (API transfer).';
	} elseif ( function_exists( 'tilfy_icerik_medya_indirme_bekliyor_mu' ) && tilfy_icerik_medya_indirme_bekliyor_mu( (int) $icerik->id ) ) {
		$detay = '"' . $baslik . '" - source ' . $medya . ' will download to server first, then ' . $hedef . ' upload will start.';
	} elseif ( function_exists( 'tilfy_kuyruk_paylasim_bekliyor_mu' ) && tilfy_kuyruk_paylasim_bekliyor_mu( (int) $paylasim->id ) ) {
		$detay = '"' . $baslik . '" - waiting in queue for ' . $hedef . ' upload.';
	} else {
		$detay = '"' . $baslik . '" - share record ready; Tilfy queue will start ' . $hedef . ' upload on the next step.';
	}

	return array_merge(
		array(
			'baslik'          => $baslik,
			'yol'             => $yol,
			'ozet'            => $durum === 'yukleniyor'
				? ( function_exists( 'tilfy_icerik_medya_indirme_bekliyor_mu' ) && tilfy_icerik_medya_indirme_bekliyor_mu( (int) $icerik->id )
					? 'Downloading media'
					: 'Uploading to platform' )
				: ( $durum === 'zamanlandi' ? 'Scheduled' : 'Share queued' ),
			'detay'           => $detay,
			'kaynak_platform' => sanitize_key( (string) ( $icerik->kaynak_platform ?? '' ) ),
			'medya_tipi'      => sanitize_key( (string) ( $icerik->medya_tipi ?? '' ) ),
			'medya_hazir'     => ! ( function_exists( 'tilfy_icerik_medya_indirme_bekliyor_mu' ) && tilfy_icerik_medya_indirme_bekliyor_mu( (int) ( $paylasim->icerik_id ?? 0 ) ) ),
		),
		tilfy_aktivite_icerik_ekstra( $icerik )
	);
}

function tilfy_kuyruk_aktivite_satirlari() {
	global $wpdb;
	$rows  = $wpdb->get_results(
		"SELECT id, islem, durum, payload, hata, guncelleme, deneme FROM " . tilfy_tablo( 'kuyruk' ) . " WHERE durum IN ('beklemede','calisiyor') ORDER BY FIELD(durum,'calisiyor','beklemede'), id ASC LIMIT 250"
	);
	$icerik_idler  = array();
	$paylasim_idler = array();
	$ham           = array();
	foreach ( (array) $rows as $satir ) {
		$payload = json_decode( (string) $satir->payload, true );
		if ( ! is_array( $payload ) ) {
			$payload = array();
		}
		$icerik_id  = (int) ( $payload['icerik_id'] ?? 0 );
		$paylasim_id = (int) ( $payload['paylasim_id'] ?? 0 );
		if ( $icerik_id > 0 ) {
			$icerik_idler[] = $icerik_id;
		}
		if ( $paylasim_id > 0 ) {
			$paylasim_idler[] = $paylasim_id;
		}
		$ham[] = array(
			'satir'   => $satir,
			'payload' => $payload,
		);
	}
	$icerik_haritasi = array();
	if ( ! empty( $icerik_idler ) ) {
		$icerik_idler = array_values( array_unique( array_map( 'intval', $icerik_idler ) ) );
		$yer          = implode( ',', array_fill( 0, count( $icerik_idler ), '%d' ) );
		$icerik_satir = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . " WHERE id IN ($yer)", $icerik_idler ) );
		foreach ( (array) $icerik_satir as $icerik ) {
			$icerik_haritasi[ (int) $icerik->id ] = $icerik;
		}
	}
	$paylasim_haritasi = array();
	if ( ! empty( $paylasim_idler ) ) {
		$paylasim_idler = array_values( array_unique( array_map( 'intval', $paylasim_idler ) ) );
		$yer            = implode( ',', array_fill( 0, count( $paylasim_idler ), '%d' ) );
		$paylasim_satir = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'paylasim' ) . " WHERE id IN ($yer)", $paylasim_idler ) );
		foreach ( (array) $paylasim_satir as $paylasim ) {
			$paylasim_haritasi[ (int) $paylasim->id ] = $paylasim;
			if ( (int) $paylasim->icerik_id > 0 && ! isset( $icerik_haritasi[ (int) $paylasim->icerik_id ] ) ) {
				$icerik_idler[] = (int) $paylasim->icerik_id;
			}
		}
	}
	if ( ! empty( $icerik_idler ) ) {
		$eksik = array();
		foreach ( array_unique( array_map( 'intval', $icerik_idler ) ) as $cid ) {
			if ( ! isset( $icerik_haritasi[ $cid ] ) ) {
				$eksik[] = $cid;
			}
		}
		if ( ! empty( $eksik ) ) {
			$yer = implode( ',', array_fill( 0, count( $eksik ), '%d' ) );
			$icerik_satir = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . " WHERE id IN ($yer)", $eksik ) );
			foreach ( (array) $icerik_satir as $icerik ) {
				$icerik_haritasi[ (int) $icerik->id ] = $icerik;
			}
		}
	}
	$cikti = array();
	foreach ( $ham as $oge ) {
		$satir   = $oge['satir'];
		$payload = $oge['payload'];
		$paylasim = isset( $paylasim_haritasi[ (int) ( $payload['paylasim_id'] ?? 0 ) ] ) ? $paylasim_haritasi[ (int) $payload['paylasim_id'] ] : null;
		$icerik_id = (int) ( $payload['icerik_id'] ?? ( $paylasim ? (int) $paylasim->icerik_id : 0 ) );
		$icerik    = isset( $icerik_haritasi[ $icerik_id ] ) ? $icerik_haritasi[ $icerik_id ] : null;
		$durum = (string) $satir->durum;
		$erteleme = tilfy_kuyruk_bekleme_erteleme_bilgi( $durum, (string) ( $satir->guncelleme ?? '' ) );
		$meta      = tilfy_kuyruk_islem_detay_olustur( (string) $satir->islem, $durum, $payload, $icerik, $paylasim );
		if ( ! empty( $erteleme['bekleme_erteleme'] ) ) {
			$meta['ozet'] = tilfy_kuyruk_islem_ozet_metin(
				(string) $satir->islem,
				false,
				true,
				(string) ( $erteleme['bekleme_erteleme_etiket'] ?? '' )
			);
		}
		$veri_tipi = tilfy_kuyruk_islem_veri_tipi( (string) $satir->islem, $icerik );
		$cikti[]   = array_merge(
			array(
				'id'          => (int) $satir->id,
				'islem'       => (string) $satir->islem,
				'durum'       => $durum,
				'etiket'      => tilfy_kuyruk_islem_etiket( (string) $satir->islem, $payload ),
				'platform'    => sanitize_key( (string) ( $payload['platform'] ?? '' ) ),
				'paylasim_id' => (int) ( $payload['paylasim_id'] ?? 0 ),
				'hata'        => sanitize_text_field( $satir->hata ?? '' ),
				'deneme'      => (int) ( $satir->deneme ?? 0 ),
				'veri_tipi'   => $veri_tipi['tip'],
				'veri_etiket' => $veri_tipi['etiket'],
				'yuzde'       => tilfy_kuyruk_islem_yuzde( (string) $satir->islem, $durum, (string) ( $satir->guncelleme ?? '' ) ),
				'guncelleme'  => sanitize_text_field( (string) ( $satir->guncelleme ?? '' ) ),
			),
			$erteleme,
			$meta
		);
	}
	return $cikti;
}

function tilfy_kuyruk_son_senkron_hatasi( $platform = '' ) {
	global $wpdb;
	$platform = sanitize_key( (string) $platform );
	$kt       = tilfy_tablo( 'kuyruk' );
	if ( $platform !== '' && $platform !== 'tumu' ) {
		$satirlar = $wpdb->get_results(
			$wpdb->prepare(
				"SELECT durum, hata, payload FROM {$kt} WHERE islem = 'icerik_cek' AND durum IN ('tamam','hata') ORDER BY id DESC LIMIT %d",
				30
			)
		);
		foreach ( (array) $satirlar as $satir ) {
			$payload = json_decode( (string) ( $satir->payload ?? '' ), true );
			$pl      = is_array( $payload ) ? sanitize_key( (string) ( $payload['platform'] ?? '' ) ) : '';
			if ( $pl !== $platform ) {
				continue;
			}
			if ( (string) $satir->durum === 'tamam' ) {
				return '';
			}
			$hata = sanitize_text_field( (string) ( $satir->hata ?? '' ) );
			if ( $hata === '' || in_array( $hata, array( 'takili_iptal', 'senkron_iptal' ), true ) ) {
				return '';
			}
			return $hata;
		}
		return '';
	}
	$son = $wpdb->get_row(
		"SELECT durum, hata FROM {$kt} WHERE islem IN ('icerik_cek','tumu_senkron') AND durum IN ('tamam','hata') ORDER BY id DESC LIMIT 1"
	);
	if ( ! $son || (string) $son->durum !== 'hata' ) {
		return '';
	}
	$hata = sanitize_text_field( (string) ( $son->hata ?? '' ) );
	if ( $hata === '' || in_array( $hata, array( 'takili_iptal', 'senkron_iptal' ), true ) ) {
		return '';
	}
	return $hata;
}

function tilfy_kuyruk_calisiyor_iptal() {
	global $wpdb;
	$kt       = tilfy_tablo( 'kuyruk' );
	$pt       = tilfy_tablo( 'paylasim' );
	$satirlar = $wpdb->get_results( "SELECT id, islem, payload FROM {$kt} WHERE durum = 'calisiyor'" );
	$adet     = 0;
	$simdi    = current_time( 'mysql' );
	foreach ( (array) $satirlar as $is ) {
		$payload = json_decode( (string) $is->payload, true );
		$pid     = is_array( $payload ) ? (int) ( $payload['paylasim_id'] ?? 0 ) : 0;
		if ( $pid > 0 ) {
			$wpdb->update(
				$pt,
				array(
					'durum'       => 'beklemede',
					'hata_mesaji' => 'Takili kuyruk iptal edildi',
					'guncelleme'  => $simdi,
				),
				array( 'id' => $pid )
			);
		}
		$wpdb->update(
			$kt,
			array(
				'durum'      => 'hata',
				'hata'       => 'takili_iptal',
				'guncelleme' => $simdi,
			),
			array( 'id' => (int) $is->id )
		);
		++$adet;
	}
	if ( $adet > 0 && function_exists( 'tilfy_kuyruk_duraklat_set' ) ) {
		tilfy_kuyruk_duraklat_set( false );
	}
	return $adet;
}

function tilfy_aktivite_paylasim_kuyrugu_getir() {
	global $wpdb;
	$durum_etiket = array(
		'beklemede'  => 'Waiting',
		'yukleniyor' => 'Uploading',
		'zamanlandi' => 'Scheduled',
		'sirada'     => 'Queued',
	);
	$rows         = $wpdb->get_results(
		'SELECT p.id, p.icerik_id, p.hedef_platform, p.durum, p.hata_mesaji, p.zamanlama, p.ozel_baslik, p.kaynak,
			i.baslik, i.aciklama, i.kaynak_platform, i.kaynak_id, i.medya_tipi, i.medya_dosya_id,
			i.kapak_url, i.medya_url, i.kaynak_url
		FROM ' . tilfy_tablo( 'paylasim' ) . ' p
		LEFT JOIN ' . tilfy_tablo( 'icerik' ) . ' i ON i.id = p.icerik_id
		WHERE p.durum IN (\'beklemede\',\'yukleniyor\',\'zamanlandi\',\'sirada\')
		ORDER BY FIELD(p.durum,\'yukleniyor\',\'beklemede\',\'sirada\',\'zamanlandi\'), p.id ASC
		LIMIT 50'
	);
	$cikti = array();
	foreach ( (array) $rows as $satir ) {
		$durum = sanitize_key( (string) ( $satir->durum ?? '' ) );
		$meta  = tilfy_paylasim_bekleme_detay_olustur( $satir, $satir );
		$etiket = $durum_etiket[ $durum ] ?? $durum;
		if ( $durum === 'zamanlandi' && function_exists( 'tilfy_paylasim_durum_etiket' ) ) {
			$etiket = tilfy_paylasim_durum_etiket( $durum, $satir->zamanlama ?? null );
		} elseif ( $durum === 'zamanlandi' ) {
			$zaman = trim( (string) ( $satir->zamanlama ?? '' ) );
			if ( $zaman !== '' ) {
				$etiket = mysql2date( 'd.m.Y H:i', $zaman );
				if ( function_exists( 'tilfy_yerel_mysql_ts' ) && tilfy_yerel_mysql_ts( $zaman ) <= time() ) {
					$etiket .= ' · overdue';
				}
			}
		}
		$yuzde = function_exists( 'tilfy_paylasim_durum_yuzde' ) ? tilfy_paylasim_durum_yuzde( $durum ) : 0;
		if ( $durum === 'yukleniyor' && (int) ( $satir->medya_dosya_id ?? 0 ) <= 0 && (
			trim( (string) ( $satir->medya_url ?? '' ) ) !== ''
			|| ( function_exists( 'tilfy_icerik_meta_uzaktan_medya_mi' ) && tilfy_icerik_meta_uzaktan_medya_mi( $satir ) )
		) ) {
			$yuzde  = 8;
			$etiket = 'Downloading media';
		}
		$cikti[] = array_merge(
			array(
				'id'             => (int) $satir->id,
				'icerik_id'      => (int) $satir->icerik_id,
				'hedef_platform' => sanitize_key( (string) ( $satir->hedef_platform ?? '' ) ),
				'durum'          => $durum,
				'durum_etiket'   => $etiket,
				'kaynak'         => sanitize_key( (string) ( $satir->kaynak ?? 'manuel' ) ),
				'yuzde'          => $yuzde,
				'hata_mesaji'    => sanitize_text_field( (string) ( $satir->hata_mesaji ?? '' ) ),
				'zamanlama'      => sanitize_text_field( (string) ( $satir->zamanlama ?? '' ) ),
				'kuyrukta'       => function_exists( 'tilfy_kuyruk_paylasim_bekliyor_mu' ) ? tilfy_kuyruk_paylasim_bekliyor_mu( (int) $satir->id ) : false,
			),
			$meta
		);
	}
	return $cikti;
}

function tilfy_kuyruk_islem_veri_tipi( $islem, $icerik = null ) {
	$islem = sanitize_key( (string) $islem );
	if ( in_array( $islem, array( 'icerik_cek', 'istatistik_sync', 'tumu_senkron', 'otomasyon_kontrol' ), true ) ) {
		return array(
			'tip'    => 'metadata',
			'etiket' => 'Metadata / sync',
		);
	}
	if ( $islem === 'medya_indir' ) {
		$medya = $icerik ? sanitize_key( (string) ( $icerik->medya_tipi ?? '' ) ) : '';
		if ( $medya === 'gorsel' ) {
			return array(
				'tip'    => 'gorsel_dosya',
				'etiket' => 'Real image download',
			);
		}
		return array(
			'tip'    => 'video_dosya',
			'etiket' => 'Real video download',
		);
	}
	if ( in_array( $islem, array( 'paylasim_gonder', 'youtube_sonrasi' ), true ) ) {
		return array(
			'tip'    => 'yukleme',
			'etiket' => 'Platform upload',
		);
	}
	return array(
		'tip'    => 'diger',
		'etiket' => 'Background job',
	);
}

function tilfy_yerel_mysql_ts( $mysql ) {
	$mysql = trim( (string) $mysql );
	if ( $mysql === '' ) {
		return 0;
	}
	if ( function_exists( 'wp_timezone' ) ) {
		try {
			$dt = new DateTimeImmutable( $mysql, wp_timezone() );
			return $dt->getTimestamp();
		} catch ( Exception $e ) {
			/* ignore */
		}
	}
	return (int) strtotime( $mysql );
}

function tilfy_aktivite_debug_getir() {
	global $wpdb;
	$kt              = tilfy_tablo( 'kuyruk' );
	$pt              = tilfy_tablo( 'paylasim' );
	$son_cron        = sanitize_text_field( (string) get_option( 'tilfy_kuyruk_son_cron', '' ) );
	$son_cron_ts     = (int) get_option( 'tilfy_kuyruk_son_cron_ts', 0 );
	if ( $son_cron_ts <= 0 && $son_cron !== '' ) {
		$son_cron_ts = tilfy_yerel_mysql_ts( $son_cron );
	}
	$next_cron       = wp_next_scheduled( 'tilfy_kuyruk_isle' );
	$simdi_ts        = time();
	$cron_gecikme    = false;
	$bekleyen_kuyruk = tilfy_kuyruk_bekleyen_say();
	if ( $bekleyen_kuyruk > 0 && ( $son_cron_ts <= 0 || ( $simdi_ts - $son_cron_ts ) > 180 ) ) {
		$cron_gecikme = true;
	}
	$takili = array();
	$takili_satirlar = $wpdb->get_results(
		"SELECT id, islem, payload, guncelleme FROM {$kt} WHERE durum = 'calisiyor' ORDER BY guncelleme ASC LIMIT 20"
	);
	foreach ( (array) $takili_satirlar as $satir ) {
		$payload  = json_decode( (string) $satir->payload, true );
		$icerik_id = is_array( $payload ) ? (int) ( $payload['icerik_id'] ?? 0 ) : 0;
		$gunc_ts  = tilfy_yerel_mysql_ts( (string) $satir->guncelleme );
		$takili[] = array(
			'id'        => (int) $satir->id,
			'islem'     => (string) $satir->islem,
			'icerik_id' => $icerik_id,
			'dakika'    => $gunc_ts > 0 ? max( 0, (int) floor( ( $simdi_ts - $gunc_ts ) / 60 ) ) : 0,
		);
	}
	$islem_gruplari = $wpdb->get_results(
		"SELECT islem, durum, COUNT(*) AS adet FROM {$kt} WHERE durum IN ('beklemede','calisiyor') GROUP BY islem, durum ORDER BY islem, durum"
	);
	$gruplar = array();
	foreach ( (array) $islem_gruplari as $grup ) {
		$gruplar[] = array(
			'islem'  => (string) $grup->islem,
			'durum'  => (string) $grup->durum,
			'adet'   => (int) $grup->adet,
			'etiket' => tilfy_kuyruk_islem_etiket( (string) $grup->islem, array() ),
			'durum_etiket' => tilfy_kuyruk_durum_etiket( (string) $grup->durum ),
		);
	}
	$otomasyon_aktif = (int) $wpdb->get_var(
		'SELECT COUNT(*) FROM ' . tilfy_tablo( 'otomasyon' ) . ' WHERE aktif = 1'
	);
	$bekleyen_paylasim = (int) $wpdb->get_var(
		"SELECT COUNT(*) FROM {$pt} WHERE durum IN ('beklemede','yukleniyor','zamanlandi')"
	);
	$yinelenen = (int) $wpdb->get_var(
		"SELECT COUNT(*) FROM (
			SELECT icerik_id, hedef_platform, COUNT(*) AS c FROM {$pt}
			WHERE durum IN ('beklemede','yukleniyor','zamanlandi')
			GROUP BY icerik_id, hedef_platform HAVING c > 1
		) t"
	);
	$medya_bekleyen = tilfy_kuyruk_medya_bekleyen_say();
	$zamanlandi_gecikmis = function_exists( 'tilfy_zamanlanmis_paylasim_gecikmis_say' ) ? tilfy_zamanlanmis_paylasim_gecikmis_say() : 0;
	$notlar = array();
	if ( $zamanlandi_gecikmis > 0 ) {
		$notlar[] = sprintf( '%d scheduled shares are past due; trying to queue them.', $zamanlandi_gecikmis );
	}
	if ( $cron_gecikme ) {
		$notlar[] = 'WP-Cron does not appear to have run in the last 3 minutes; pending jobs may have piled up.';
	}
	if ( $medya_bekleyen > 0 ) {
		$notlar[] = sprintf( '%d media download jobs - these download real video/image files from Instagram/CDN (not metadata).', $medya_bekleyen );
	}
	if ( $yinelenen > 0 ) {
		$notlar[] = sprintf( '%d content+platform pairs have duplicate pending share records (may be leftover from an old cart bug).', $yinelenen );
	}
	if ( $otomasyon_aktif > 0 ) {
		$notlar[] = sprintf( '%d active automation rules; does not touch content you scheduled manually (skipped if a scheduled/pending share exists).', $otomasyon_aktif );
	}
	if ( ! empty( $takili ) ) {
		$notlar[] = sprintf( '%d jobs stuck in "running" state (media resets after 45 min, others after 12 min).', count( $takili ) );
	}
	if ( $next_cron && (int) $next_cron < $simdi_ts ) {
		$notlar[] = 'Next cron time has passed - WP-Cron may not have fired without a site visit.';
	}
	$tz_etiket = function_exists( 'wp_timezone_string' ) ? wp_timezone_string() : '';
	return array(
		'son_cron'          => $son_cron,
		'son_cron_ts'       => $son_cron_ts,
		'son_cron_etiket'   => $son_cron_ts > 0 ? wp_date( 'j M Y, H:i:s', $son_cron_ts ) : ( $son_cron !== '' ? $son_cron : 'No records yet' ),
		'sonraki_cron'      => $next_cron ? (int) $next_cron : 0,
		'sonraki_cron_etiket'=> $next_cron ? wp_date( 'j M Y, H:i:s', (int) $next_cron ) : 'Not scheduled',
		'zaman_dilimi'      => $tz_etiket,
		'cron_gecikme'      => $cron_gecikme,
		'takili_isler'      => $takili,
		'islem_gruplari'    => $gruplar,
		'otomasyon_aktif'   => $otomasyon_aktif,
		'bekleyen_paylasim' => $bekleyen_paylasim,
		'yinelenen_paylasim'=> $yinelenen,
		'medya_bekleyen'    => $medya_bekleyen,
		'zamanlandi_gecikmis'=> $zamanlandi_gecikmis,
		'duraklatildi'      => tilfy_kuyruk_duraklatildi_mi(),
		'notlar'            => $notlar,
		'kapak_log'         => function_exists( 'tilfy_islem_log_satirlari' ) ? tilfy_islem_log_satirlari( 120, 0, 'kapak' ) : array(),
		'api_yanitlari'     => function_exists( 'tilfy_api_yanit_son_getir' ) ? tilfy_api_yanit_son_getir() : array(),
		'paylasim_hatalari' => function_exists( 'tilfy_aktivite_son_paylasim_hatalari' ) ? tilfy_aktivite_son_paylasim_hatalari() : array(),
		'medya_hatalari'    => function_exists( 'tilfy_aktivite_son_medya_hatalari' ) ? tilfy_aktivite_son_medya_hatalari() : array(),
	);
}

function tilfy_kuyruk_satirlari_sil( $ids, $iptal_paylasim = false, $zorla_calisan = false ) {
	global $wpdb;
	$ids = array_values( array_filter( array_map( 'intval', (array) $ids ) ) );
	if ( empty( $ids ) ) {
		return array(
			'silinen'        => 0,
			'iptal_paylasim' => 0,
			'atlanan'        => 0,
		);
	}
	$kt      = tilfy_tablo( 'kuyruk' );
	$pt      = tilfy_tablo( 'paylasim' );
	$simdi   = current_time( 'mysql' );
	$yer     = implode( ',', array_fill( 0, count( $ids ), '%d' ) );
	$satirlar = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$kt} WHERE id IN ({$yer})", ...$ids ) );
	$silinen = 0;
	$iptal_p = 0;
	$atlanan = 0;
	$icerik_iptal = array();
	foreach ( (array) $satirlar as $is ) {
		$durum   = sanitize_key( (string) $is->durum );
		$payload = json_decode( (string) $is->payload, true );
		if ( ! is_array( $payload ) ) {
			$payload = array();
		}
		$pid       = (int) ( $payload['paylasim_id'] ?? 0 );
		$icerik_id = (int) ( $payload['icerik_id'] ?? 0 );
		if ( $durum === 'calisiyor' && ! $zorla_calisan ) {
			++$atlanan;
			continue;
		}
		if ( $durum === 'calisiyor' && $zorla_calisan ) {
			$wpdb->update(
				$kt,
				array(
					'durum'      => 'hata',
					'hata'       => 'kullanici_iptal',
					'guncelleme' => $simdi,
				),
				array( 'id' => (int) $is->id )
			);
			++$silinen;
		} elseif ( $durum === 'beklemede' ) {
			$wpdb->delete( $kt, array( 'id' => (int) $is->id ) );
			++$silinen;
		} else {
			++$atlanan;
			continue;
		}
		if ( $iptal_paylasim && $pid > 0 ) {
			$wpdb->update(
				$pt,
				array(
					'durum'       => 'hata',
					'hata_mesaji' => 'Kullanıcı kuyruk iptal etti',
					'guncelleme'  => $simdi,
				),
				array( 'id' => $pid )
			);
			++$iptal_p;
		} elseif ( $iptal_paylasim && $icerik_id > 0 && (string) $is->islem === 'medya_indir' ) {
			$icerik_iptal[ $icerik_id ] = true;
		}
	}
	if ( $iptal_paylasim && ! empty( $icerik_iptal ) ) {
		foreach ( array_keys( $icerik_iptal ) as $cid ) {
			$paylasimlar = $wpdb->get_col(
				$wpdb->prepare(
					"SELECT id FROM {$pt} WHERE icerik_id = %d AND durum IN ('beklemede','yukleniyor','zamanlandi')",
					(int) $cid
				)
			);
			foreach ( (array) $paylasimlar as $pay_id ) {
				if ( function_exists( 'tilfy_kuyruk_paylasim_iptal' ) ) {
					tilfy_kuyruk_paylasim_iptal( (int) $pay_id );
				}
				$wpdb->update(
					$pt,
					array(
						'durum'       => 'hata',
						'hata_mesaji' => 'Kullanıcı medya indirme iptal etti',
						'guncelleme'  => $simdi,
					),
					array( 'id' => (int) $pay_id )
				);
				++$iptal_p;
			}
		}
	}
	return array(
		'silinen'        => $silinen,
		'iptal_paylasim' => $iptal_p,
		'atlanan'        => $atlanan,
	);
}

function tilfy_paylasim_bekleyen_iptal( $ids ) {
	global $wpdb;
	$ids = array_values( array_filter( array_map( 'intval', (array) $ids ) ) );
	if ( empty( $ids ) ) {
		return 0;
	}
	$pt    = tilfy_tablo( 'paylasim' );
	$simdi = current_time( 'mysql' );
	$adet  = 0;
	foreach ( $ids as $paylasim_id ) {
		$paylasim = $wpdb->get_row( $wpdb->prepare( "SELECT id, durum FROM {$pt} WHERE id = %d", $paylasim_id ) );
		if ( ! $paylasim || ! in_array( (string) $paylasim->durum, array( 'beklemede', 'yukleniyor', 'zamanlandi' ), true ) ) {
			continue;
		}
		if ( function_exists( 'tilfy_kuyruk_paylasim_iptal' ) ) {
			tilfy_kuyruk_paylasim_iptal( $paylasim_id );
		}
		$wpdb->update(
			$pt,
			array(
				'durum'       => 'hata',
				'hata_mesaji' => 'Kullanıcı iptal etti',
				'guncelleme'  => $simdi,
			),
			array( 'id' => $paylasim_id )
		);
		++$adet;
	}
	return $adet;
}

function tilfy_aktivite_durum_getir( $paylasim_idler = array(), $senkron_platform = '' ) {
	if ( function_exists( 'tilfy_kuyruk_takili_serbest_birak' ) ) {
		tilfy_kuyruk_takili_serbest_birak( 3 );
	}
	$paylasim_veri = array(
		'paylasimlar'     => array(),
		'genel_yuzde'     => 0,
		'tamamlandi'      => true,
		'kuyruk_bekleyen' => 0,
		'kuyruk_arka'     => 0,
		'tamamlanan'      => 0,
		'toplam'          => 0,
	);
	if ( ! empty( $paylasim_idler ) && function_exists( 'tilfy_paylasimlar_durum_getir' ) ) {
		$paylasim_veri = tilfy_paylasimlar_durum_getir( $paylasim_idler );
	}
	$paylasim_kuyruk = tilfy_aktivite_paylasim_kuyrugu_getir();
	$zamanli_say     = 0;
	$aktif_say       = 0;
	foreach ( $paylasim_kuyruk as $oge ) {
		if ( ( $oge['durum'] ?? '' ) === 'zamanlandi' ) {
			++$zamanli_say;
		} else {
			++$aktif_say;
		}
	}
	$isler       = tilfy_kuyruk_aktivite_satirlari();
	$bekleyen    = tilfy_kuyruk_bekleyen_say();
	return array(
		'bekleyen'         => $bekleyen,
		'kuyruk_gosterilen'=> count( $isler ),
		'senkron_bekleyen' => tilfy_kuyruk_senkron_bekleyen_say(),
		'medya_bekleyen'   => tilfy_kuyruk_medya_bekleyen_say(),
		'medya_indiriyor'  => tilfy_kuyruk_medya_indir_aktif_mi(),
		'duraklatildi'     => tilfy_kuyruk_duraklatildi_mi(),
		'isler'            => $isler,
		'paylasim'         => $paylasim_veri,
		'paylasim_kuyruk'  => $paylasim_kuyruk,
		'paylasim_aktif'   => $aktif_say,
		'paylasim_zamanli' => $zamanli_say,
		'senkron_hata'     => tilfy_kuyruk_son_senkron_hatasi( $senkron_platform ),
		'debug'            => tilfy_aktivite_debug_getir(),
	);
}
