<?php

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

function tilfy_zamanlama_mysql_cevir( $girdi ) {
	$girdi = trim( (string) $girdi );
	if ( $girdi === '' ) {
		return null;
	}
	try {
		$dt = date_create( str_replace( 'T', ' ', $girdi ), wp_timezone() );
		if ( ! $dt ) {
			return null;
		}
		return $dt->format( 'Y-m-d H:i:s' );
	} catch ( Exception $e ) {
		return null;
	}
}

function tilfy_zamanlama_gelecek_mi( $mysql ) {
	$mysql = trim( (string) $mysql );
	if ( $mysql === '' ) {
		return false;
	}
	try {
		$dt = new DateTime( $mysql, wp_timezone() );
		$hedef = (int) $dt->getTimestamp();
	} catch ( Exception $e ) {
		$hedef = (int) strtotime( $mysql );
	}
	if ( $hedef <= 0 ) {
		return false;
	}
	return $hedef > (int) current_time( 'timestamp' );
}

function tilfy_zamanlama_yayilim_normalize( $gunluk_adet, $arasi_dakika ) {
	return array(
		'gunluk_adet'          => max( 1, min( 50, (int) $gunluk_adet ) ),
		'paylasim_arasi_dakika' => max( 0, min( 1440, (int) $arasi_dakika ) ),
	);
}

function tilfy_zamanlama_yayilim_aktif_mi( $gunluk_adet, $arasi_dakika, $adet ) {
	$adet = (int) $adet;
	if ( $adet <= 1 ) {
		return false;
	}
	$norm = tilfy_zamanlama_yayilim_normalize( $gunluk_adet, $arasi_dakika );
	return $norm['gunluk_adet'] > 1;
}

function tilfy_zamanlanmis_paylasim_gecikmis_say() {
	global $wpdb;
	$simdi = current_time( 'mysql' );
	return (int) $wpdb->get_var(
		$wpdb->prepare(
			'SELECT COUNT(*) FROM ' . tilfy_tablo( 'paylasim' ) . " WHERE durum = 'zamanlandi' AND zamanlama IS NOT NULL AND zamanlama <= %s",
			$simdi
		)
	);
}

function tilfy_zamanlama_baslangic_ts( $girdi ) {
	$mysql = tilfy_zamanlama_mysql_cevir( $girdi );
	if ( ! $mysql ) {
		return 0;
	}
	try {
		$dt = new DateTime( $mysql, wp_timezone() );
		return (int) $dt->getTimestamp();
	} catch ( Exception $e ) {
		return 0;
	}
}

function tilfy_zamanlama_ts_to_input( $ts ) {
	$ts = (int) $ts;
	if ( $ts <= 0 ) {
		return '';
	}
	try {
		$dt = new DateTime( '@' . $ts );
		$dt->setTimezone( wp_timezone() );
		return $dt->format( 'Y-m-d\TH:i' );
	} catch ( Exception $e ) {
		return '';
	}
}

function tilfy_zamanlama_slot_ts( $baslangic_girdi, $sira, $gunluk_adet, $arasi_dakika ) {
	$bas_ts = tilfy_zamanlama_baslangic_ts( $baslangic_girdi );
	if ( $bas_ts <= 0 ) {
		return 0;
	}
	$norm        = tilfy_zamanlama_yayilim_normalize( $gunluk_adet, $arasi_dakika );
	$sira        = max( 0, (int) $sira );
	$gun_index   = (int) floor( $sira / $norm['gunluk_adet'] );
	$slot_in_day = $sira % $norm['gunluk_adet'];
	$arasi_sn = $norm['paylasim_arasi_dakika'] > 0
		? ( $norm['paylasim_arasi_dakika'] * 60 )
		: ( $norm['gunluk_adet'] > 1 ? 60 : 0 );
	$gun_ts = $bas_ts;
	if ( $gun_index > 0 ) {
		try {
			$dt = new DateTime( '@' . $bas_ts );
			$dt->setTimezone( wp_timezone() );
			$dt->modify( '+' . $gun_index . ' days' );
			$gun_ts = (int) $dt->getTimestamp();
		} catch ( Exception $e ) {
			$gun_ts = $bas_ts + ( $gun_index * DAY_IN_SECONDS );
		}
	}
	return $gun_ts + ( $slot_in_day * $arasi_sn );
}

function tilfy_paylasim_idler_icerik_sirala( $idler ) {
	global $wpdb;
	$idler = array_values( array_filter( array_map( 'intval', (array) $idler ) ) );
	if ( count( $idler ) < 2 ) {
		return $idler;
	}
	$in = tilfy_sql_in_ints( $idler );
	if ( ! $in ) {
		return $idler;
	}
	$rows = $wpdb->get_results(
		$wpdb->prepare(
			'SELECT id, icerik_id, hedef_platform FROM ' . tilfy_tablo( 'paylasim' ) . " WHERE id IN ({$in['yer']})",
			$in['degerler']
		)
	);
	usort(
		(array) $rows,
		function ( $a, $b ) {
			$cid = (int) $a->icerik_id <=> (int) $b->icerik_id;
			if ( $cid !== 0 ) {
				return $cid;
			}
			return strcmp( (string) $a->hedef_platform, (string) $b->hedef_platform );
		}
	);
	return array_map( 'intval', wp_list_pluck( $rows, 'id' ) );
}

function tilfy_zamanlama_slot_datetime( $baslangic_girdi, $sira, $gunluk_adet, $arasi_dakika ) {
	return tilfy_zamanlama_ts_to_input( tilfy_zamanlama_slot_ts( $baslangic_girdi, $sira, $gunluk_adet, $arasi_dakika ) );
}

function tilfy_zamanlama_yayilim_gun_sayisi( $adet, $gunluk_adet ) {
	$adet = max( 0, (int) $adet );
	if ( $adet <= 0 ) {
		return 0;
	}
	$gunluk_adet = max( 1, min( 50, (int) $gunluk_adet ) );
	return (int) ceil( $adet / $gunluk_adet );
}

function tilfy_paylasim_durum_etiket( $durum, $zamanlama = null ) {
	$etiketler = array(
		'beklemede'       => tilfy__( 'Beklemede' ),
		'yukleniyor'      => tilfy__( 'Yükleniyor' ),
		'yuklendi'        => tilfy__( 'Yüklendi' ),
		'hata'            => tilfy__( 'Hata' ),
		'manuel_bekliyor' => tilfy__( 'Manuel' ),
		'zamanlandi'      => tilfy__( 'Zamanlandı' ),
		'sirada'          => tilfy__( 'Sırada' ),
	);
	if ( $durum === 'zamanlandi' && ! empty( $zamanlama ) ) {
		return mysql2date( 'd.m.Y H:i', $zamanlama );
	}
	return $etiketler[ $durum ] ?? $durum;
}

function tilfy_paylasim_kaynak_etiket( $kaynak ) {
	$kaynak = sanitize_key( (string) $kaynak );
	if ( $kaynak === 'otomasyon' ) {
		return tilfy__( 'Otomatik' );
	}
	return '';
}

function tilfy_paylasim_otomasyon_mu( $paylasim ) {
	if ( is_object( $paylasim ) ) {
		return sanitize_key( (string) ( $paylasim->kaynak ?? '' ) ) === 'otomasyon';
	}
	return sanitize_key( (string) $paylasim ) === 'otomasyon';
}

function tilfy_zamanlanmis_paylasim_kuyruga_al() {
	global $wpdb;
	if ( ! function_exists( 'tilfy_kuyruk_ekle' ) ) {
		return;
	}
	$simdi    = current_time( 'mysql' );
	$satirlar = $wpdb->get_results(
		$wpdb->prepare(
			"SELECT * FROM " . tilfy_tablo( 'paylasim' ) . " WHERE durum = 'zamanlandi' AND zamanlama IS NOT NULL AND zamanlama <= %s ORDER BY zamanlama ASC, id ASC",
			$simdi
		)
	);
	foreach ( (array) $satirlar as $paylasim ) {
		$wpdb->update(
			tilfy_tablo( 'paylasim' ),
			array(
				'durum'      => 'beklemede',
				'guncelleme' => current_time( 'mysql' ),
			),
			array( 'id' => (int) $paylasim->id )
		);
		tilfy_kuyruk_ekle(
			'paylasim_gonder',
			array(
				'paylasim_id' => (int) $paylasim->id,
				'icerik_id'   => (int) $paylasim->icerik_id,
				'platform'    => sanitize_key( (string) $paylasim->hedef_platform ),
			)
		);
	}
	if ( function_exists( 'tilfy_otomasyon_batch_sirali_tum_kontrol' ) ) {
		tilfy_otomasyon_batch_sirali_tum_kontrol();
	}
}

function tilfy_paylasim_aktif_batch_bul( $paylasim_id ) {
	global $wpdb;
	$paylasim_id = (int) $paylasim_id;
	if ( $paylasim_id <= 0 ) {
		return null;
	}
	$bt = tilfy_tablo( 'otomasyon_batch' );
	if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $bt ) ) !== $bt ) {
		return null;
	}
	$batches = $wpdb->get_results(
		"SELECT * FROM {$bt} WHERE durum IN ('planlandi','bekliyor') ORDER BY id DESC"
	);
	foreach ( (array) $batches as $batch ) {
		$pids = function_exists( 'tilfy_otomasyon_batch_paylasim_ids_coz' )
			? tilfy_otomasyon_batch_paylasim_ids_coz( $batch )
			: array();
		$kuyruk = function_exists( 'tilfy_otomasyon_batch_icerik_ids_coz' )
			? tilfy_otomasyon_batch_icerik_ids_coz( $batch )
			: array();
		$ek = function_exists( 'tilfy_otomasyon_batch_ek_veri_coz' )
			? tilfy_otomasyon_batch_ek_veri_coz( $batch )
			: array();
		if ( ( $ek['mod'] ?? '' ) === 'paylasim_sirali' ) {
			$tum = array_merge( $pids, $kuyruk );
		} else {
			$tum = $pids;
		}
		if ( in_array( $paylasim_id, array_map( 'intval', $tum ), true ) ) {
			return $batch;
		}
	}
	return null;
}

function tilfy_batch_paylasim_sira_index( $batch, $paylasim_id, $paylasim = null ) {
	$paylasim_id = (int) $paylasim_id;
	if ( ! $batch || $paylasim_id <= 0 ) {
		return 0;
	}
	if ( $paylasim ) {
		$ayar = json_decode( (string) ( $paylasim->platform_ayar ?? '' ), true );
		if ( is_array( $ayar ) && isset( $ayar['sirada_sira'] ) ) {
			return max( 0, (int) $ayar['sirada_sira'] );
		}
	}
	$ek = function_exists( 'tilfy_otomasyon_batch_ek_veri_coz' )
		? tilfy_otomasyon_batch_ek_veri_coz( $batch )
		: array();
	if ( ( $ek['mod'] ?? '' ) === 'paylasim_sirali' ) {
		$tam = array_merge(
			function_exists( 'tilfy_otomasyon_batch_paylasim_ids_coz' ) ? tilfy_otomasyon_batch_paylasim_ids_coz( $batch ) : array(),
			function_exists( 'tilfy_otomasyon_batch_icerik_ids_coz' ) ? tilfy_otomasyon_batch_icerik_ids_coz( $batch ) : array()
		);
		$idx = array_search( $paylasim_id, array_map( 'intval', $tam ), true );
		return $idx !== false ? (int) $idx : 0;
	}
	global $wpdb;
	$pids = function_exists( 'tilfy_otomasyon_batch_paylasim_ids_coz' )
		? tilfy_otomasyon_batch_paylasim_ids_coz( $batch )
		: array();
	if ( empty( $pids ) || ! in_array( $paylasim_id, array_map( 'intval', $pids ), true ) ) {
		return 0;
	}
	if ( ! $paylasim ) {
		$paylasim = $wpdb->get_row(
			$wpdb->prepare( 'SELECT icerik_id, platform_ayar FROM ' . tilfy_tablo( 'paylasim' ) . ' WHERE id = %d', $paylasim_id )
		);
	}
	$icerik_id = (int) ( $paylasim->icerik_id ?? 0 );
	if ( $icerik_id <= 0 ) {
		return 0;
	}
	$in = tilfy_sql_in_ints( $pids );
	if ( ! $in ) {
		return 0;
	}
	$satirlar = $wpdb->get_results(
		$wpdb->prepare(
			'SELECT icerik_id, MIN(id) AS min_id FROM ' . tilfy_tablo( 'paylasim' ) . " WHERE id IN ({$in['yer']}) GROUP BY icerik_id ORDER BY min_id ASC",
			$in['degerler']
		)
	);
	foreach ( (array) $satirlar as $i => $satir ) {
		if ( (int) $satir->icerik_id === $icerik_id ) {
			return (int) $i;
		}
	}
	return 0;
}

function tilfy_sirada_takvim_gunleri_guncelle() {
	global $wpdb;
	$pt = tilfy_tablo( 'paylasim' );
	$bt = tilfy_tablo( 'otomasyon_batch' );
	if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $bt ) ) !== $bt ) {
		return;
	}
	$eksik = $wpdb->get_results(
		"SELECT * FROM {$pt} WHERE durum = 'sirada'"
	);
	if ( empty( $eksik ) ) {
		return;
	}
	$batches = $wpdb->get_results(
		"SELECT * FROM {$bt} WHERE durum IN ('planlandi','bekliyor') ORDER BY id DESC"
	);
	if ( empty( $batches ) ) {
		return;
	}
	foreach ( (array) $eksik as $paylasim ) {
		$pid = (int) $paylasim->id;
		if ( $pid <= 0 ) {
			continue;
		}
		foreach ( (array) $batches as $batch ) {
			$pids = function_exists( 'tilfy_otomasyon_batch_paylasim_ids_coz' )
				? tilfy_otomasyon_batch_paylasim_ids_coz( $batch )
				: array();
			$kuyruk = function_exists( 'tilfy_otomasyon_batch_icerik_ids_coz' )
				? tilfy_otomasyon_batch_icerik_ids_coz( $batch )
				: array();
			$ek = function_exists( 'tilfy_otomasyon_batch_ek_veri_coz' )
				? tilfy_otomasyon_batch_ek_veri_coz( $batch )
				: (array) json_decode( (string) ( $batch->ek_veri ?? '' ), true );
			$mod = (string) ( $ek['mod'] ?? '' );
			if ( $mod === 'paylasim_sirali' ) {
				$tum = array_merge( $pids, $kuyruk );
			} else {
				$tum = $pids;
			}
			if ( ! in_array( $pid, array_map( 'intval', $tum ), true ) ) {
				continue;
			}
			$bas_ts = (int) ( $ek['baslangic_ts'] ?? 0 );
			if ( $bas_ts <= 0 ) {
				break;
			}
			$arasi = max( 0, (int) ( $ek['paylasim_arasi_dakika'] ?? 0 ) );
			if ( $arasi <= 0 && is_array( $ek['ortak'] ?? null ) ) {
				$arasi = max( 0, (int) ( $ek['ortak']['paylasim_arasi_dakika'] ?? 0 ) );
			}
			$gunluk = max( 1, (int) ( $ek['gunluk_adet'] ?? 0 ) );
			if ( $gunluk <= 1 && is_array( $ek['ortak'] ?? null ) ) {
				$gunluk = max( 1, (int) ( $ek['ortak']['gunluk_adet'] ?? 1 ) );
			}
			$sira = tilfy_batch_paylasim_sira_index( $batch, $pid, $paylasim );
			if ( $gunluk > 1 && function_exists( 'tilfy_zamanlama_slot_ts' ) && function_exists( 'tilfy_zamanlama_ts_to_input' ) ) {
				$bas_in = tilfy_zamanlama_ts_to_input( $bas_ts );
				$ts     = tilfy_zamanlama_slot_ts( $bas_in, $sira, $gunluk, $arasi );
			} else {
				$ts = $bas_ts + ( $sira * $arasi * 60 );
			}
			if ( $ts <= 0 ) {
				break;
			}
			$yeni_zaman = wp_date( 'Y-m-d H:i:s', $ts );
			$mevcut     = trim( (string) ( $paylasim->zamanlama ?? '' ) );
			if ( $mevcut === $yeni_zaman ) {
				break;
			}
			$wpdb->update(
				$pt,
				array(
					'zamanlama'  => $yeni_zaman,
					'guncelleme' => current_time( 'mysql' ),
				),
				array( 'id' => $pid )
			);
			break;
		}
	}
}

function tilfy_takvim_ogeleri( $yil, $ay ) {
	global $wpdb;
	if ( function_exists( 'tilfy_sirada_takvim_gunleri_guncelle' ) ) {
		tilfy_sirada_takvim_gunleri_guncelle();
	}
	$yil = max( 1970, min( 2100, (int) $yil ) );
	$ay  = max( 1, min( 12, (int) $ay ) );
	$bas = sprintf( '%04d-%02d-01 00:00:00', $yil, $ay );
	$bit = gmdate( 'Y-m-t 23:59:59', strtotime( $bas . ' UTC' ) );
	if ( function_exists( 'wp_timezone' ) ) {
		try {
			$dt = new DateTime( sprintf( '%04d-%02d-01', $yil, $ay ), wp_timezone() );
			$bit = $dt->format( 'Y-m-t' ) . ' 23:59:59';
		} catch ( Exception $e ) {
			/* ignore */
		}
	}
	return $wpdb->get_results(
		$wpdb->prepare(
			'SELECT p.*, i.baslik, i.aciklama, i.kapak_url, i.medya_url
			FROM ' . tilfy_tablo( 'paylasim' ) . ' p
			LEFT JOIN ' . tilfy_tablo( 'icerik' ) . ' i ON i.id = p.icerik_id
			WHERE p.zamanlama IS NOT NULL AND p.zamanlama >= %s AND p.zamanlama <= %s
			AND p.durum IN (\'zamanlandi\',\'sirada\',\'beklemede\',\'yukleniyor\',\'hata\')
			ORDER BY p.zamanlama ASC, p.id ASC',
			$bas,
			$bit
		)
	);
}

function tilfy_paylasim_zamanla( $paylasim_id, $zaman_girdi ) {
	global $wpdb;
	$paylasim_id = (int) $paylasim_id;
	if ( $paylasim_id <= 0 ) {
		return new WP_Error( 'tilfy_zamanlama', 'Gecersiz paylasim' );
	}
	$mysql = tilfy_zamanlama_mysql_cevir( $zaman_girdi );
	if ( ! $mysql || ! tilfy_zamanlama_gelecek_mi( $mysql ) ) {
		return new WP_Error( 'tilfy_zamanlama', 'Gecerli gelecek tarih ve saat gerekli' );
	}
	$paylasim = $wpdb->get_row(
		$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'paylasim' ) . ' WHERE id = %d', $paylasim_id )
	);
	if ( ! $paylasim ) {
		return new WP_Error( 'tilfy_zamanlama', 'Paylasim bulunamadi' );
	}
	if ( ! in_array( $paylasim->durum, array( 'zamanlandi', 'sirada', 'beklemede', 'hata', 'yukleniyor' ), true ) ) {
		return new WP_Error( 'tilfy_zamanlama', 'Bu paylasim duzenlenemez' );
	}
	if ( function_exists( 'tilfy_kuyruk_paylasim_iptal' ) ) {
		tilfy_kuyruk_paylasim_iptal( $paylasim_id );
	}
	if ( $paylasim->durum === 'sirada' && function_exists( 'tilfy_otomasyon_batch_paylasim_siradan_ayrildi' ) ) {
		tilfy_otomasyon_batch_paylasim_siradan_ayrildi( $paylasim_id );
	}
	$wpdb->update(
		tilfy_tablo( 'paylasim' ),
		array(
			'durum'       => 'zamanlandi',
			'zamanlama'   => $mysql,
			'hata_mesaji' => '',
			'guncelleme'  => current_time( 'mysql' ),
		),
		array( 'id' => $paylasim_id )
	);
	if ( function_exists( 'tilfy_paylasim_log_ekle' ) ) {
		tilfy_paylasim_log_ekle(
			$paylasim_id,
			'Takvim: ' . mysql2date( 'd.m.Y H:i', $mysql ) . ' icin yeniden zamanlandi',
			$paylasim->hedef_platform,
			'kuyruk'
		);
	}
	return true;
}

function tilfy_paylasim_takvimden_sil( $paylasim_id ) {
	global $wpdb;
	$paylasim_id = (int) $paylasim_id;
	if ( $paylasim_id <= 0 ) {
		return new WP_Error( 'tilfy_zamanlama', 'Gecersiz paylasim' );
	}
	$paylasim = $wpdb->get_row(
		$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'paylasim' ) . ' WHERE id = %d', $paylasim_id )
	);
	if ( ! $paylasim ) {
		return new WP_Error( 'tilfy_zamanlama', 'Paylasim bulunamadi' );
	}
	if ( ! in_array( $paylasim->durum, array( 'zamanlandi', 'sirada', 'beklemede', 'hata', 'yukleniyor' ), true ) ) {
		return new WP_Error( 'tilfy_zamanlama', 'Bu paylasim silinemez' );
	}
	if ( function_exists( 'tilfy_kuyruk_paylasim_iptal' ) ) {
		tilfy_kuyruk_paylasim_iptal( $paylasim_id );
	}
	if ( function_exists( 'tilfy_otomasyon_batch_paylasim_silindi' ) ) {
		tilfy_otomasyon_batch_paylasim_silindi( $paylasim_id );
	}
	if ( function_exists( 'tilfy_paylasim_sil' ) ) {
		tilfy_paylasim_sil( $paylasim_id );
		return true;
	}
	$wpdb->delete( tilfy_tablo( 'paylasim' ), array( 'id' => $paylasim_id ) );
	return true;
}

function tilfy_paylasim_simdi_gonder( $paylasim_id ) {
	global $wpdb;
	$paylasim_id = (int) $paylasim_id;
	if ( $paylasim_id <= 0 ) {
		return new WP_Error( 'tilfy_simdi', 'Gecersiz paylasim' );
	}
	$paylasim = $wpdb->get_row(
		$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'paylasim' ) . ' WHERE id = %d', $paylasim_id )
	);
	if ( ! $paylasim ) {
		return new WP_Error( 'tilfy_simdi', 'Paylasim bulunamadi' );
	}
	if ( in_array( (string) $paylasim->durum, array( 'yuklendi', 'manuel_bekliyor' ), true ) ) {
		return new WP_Error( 'tilfy_simdi', 'Zaten yuklendi' );
	}
	if ( (string) $paylasim->durum === 'yukleniyor' ) {
		return new WP_Error( 'tilfy_simdi', 'Zaten yukleniyor' );
	}
	if ( ! in_array( (string) $paylasim->durum, array( 'zamanlandi', 'sirada', 'beklemede', 'hata' ), true ) ) {
		return new WP_Error( 'tilfy_simdi', 'Bu paylasim simd gonderilemez' );
	}
	if ( function_exists( 'tilfy_kuyruk_paylasim_iptal' ) ) {
		tilfy_kuyruk_paylasim_iptal( $paylasim_id );
	}
	if ( (string) $paylasim->durum === 'sirada' ) {
		$batch = tilfy_paylasim_aktif_batch_bul( $paylasim_id );
		if ( $batch && function_exists( 'tilfy_otomasyon_batch_paylasim_simdi_gonder_bagla' ) ) {
			tilfy_otomasyon_batch_paylasim_simdi_gonder_bagla( $paylasim_id, $batch );
		}
		if ( $batch && function_exists( 'tilfy_otomasyon_batch_sirada_aktif_et' ) ) {
			$aktif = tilfy_otomasyon_batch_sirada_aktif_et( array( $paylasim_id ), $batch, true );
			if ( ! empty( $aktif ) ) {
				if ( function_exists( 'tilfy_paylasim_log_ekle' ) ) {
					tilfy_paylasim_log_ekle( $paylasim_id, 'Takvim: sirada - simdi gonder kuyruga eklendi', $paylasim->hedef_platform, 'yukleme' );
				}
				if ( function_exists( 'tilfy_kuyruk_arka_plan_tetik' ) ) {
					tilfy_kuyruk_arka_plan_tetik();
				}
				return array(
					'ok'      => true,
					'mesaj'   => 'Kuyruga eklendi',
					'eslesti' => false,
				);
			}
		}
	}
	if ( sanitize_key( (string) $paylasim->hedef_platform ) === 'youtube' && function_exists( 'tilfy_youtube_otomatik_eslestir_dene' ) ) {
		if ( tilfy_youtube_otomatik_eslestir_dene( $paylasim_id ) ) {
			if ( function_exists( 'tilfy_paylasim_log_ekle' ) ) {
				tilfy_paylasim_log_ekle( $paylasim_id, 'Takvim: simdi gonder - YouTube eslesmesi', $paylasim->hedef_platform, 'yukleme' );
			}
			return array(
				'ok'      => true,
				'mesaj'   => 'YouTube eslesmesi',
				'eslesti' => true,
			);
		}
	}
	$simdi = current_time( 'mysql' );
	$wpdb->update(
		tilfy_tablo( 'paylasim' ),
		array(
			'durum'       => 'beklemede',
			'zamanlama'   => $simdi,
			'hata_mesaji' => '',
			'guncelleme'  => $simdi,
		),
		array( 'id' => $paylasim_id )
	);
	if ( function_exists( 'tilfy_kuyruk_paylasim_bekliyor_mu' ) && tilfy_kuyruk_paylasim_bekliyor_mu( $paylasim_id ) ) {
		return array(
			'ok'      => true,
			'mesaj'   => 'Zaten kuyrukta',
			'eslesti' => false,
		);
	}
	if ( ! function_exists( 'tilfy_kuyruk_ekle' ) ) {
		return new WP_Error( 'tilfy_simdi', 'Kuyruk modulu yok' );
	}
	tilfy_kuyruk_ekle(
		'paylasim_gonder',
		array(
			'paylasim_id' => $paylasim_id,
			'icerik_id'   => (int) $paylasim->icerik_id,
			'platform'    => sanitize_key( (string) $paylasim->hedef_platform ),
		)
	);
	if ( function_exists( 'tilfy_paylasim_log_ekle' ) ) {
		tilfy_paylasim_log_ekle( $paylasim_id, 'Takvim: simdi gonder kuyruga eklendi', $paylasim->hedef_platform, 'yukleme' );
	}
	return array(
		'ok'      => true,
		'mesaj'   => 'Kuyruga eklendi',
		'eslesti' => false,
	);
}

function tilfy_takvim_toplu_simdi_gonder( $secili ) {
	$secili   = array_values( array_filter( array_map( 'intval', (array) $secili ) ) );
	$basarili = 0;
	$hata     = 0;
	$eslesti  = 0;
	$kuyruk   = array();
	foreach ( $secili as $id ) {
		$sonuc = tilfy_paylasim_simdi_gonder( $id );
		if ( is_wp_error( $sonuc ) ) {
			++$hata;
			continue;
		}
		++$basarili;
		if ( ! empty( $sonuc['eslesti'] ) ) {
			++$eslesti;
		} else {
			$kuyruk[] = $id;
		}
	}
	if ( $basarili === 0 ) {
		return new WP_Error( 'tilfy_simdi', 'Hicbir paylasim gonderilemedi' );
	}
	return array(
		'basarili' => $basarili,
		'hata'     => $hata,
		'eslesti'  => $eslesti,
		'kuyruk'   => $kuyruk,
		'mesaj'    => $basarili . ' paylasim islendi' . ( $hata > 0 ? ' (' . $hata . ' atlandi)' : '' ),
	);
}

function tilfy_takvim_paylasim_siraya_al( $paylasim_id ) {
	global $wpdb;
	$paylasim_id = (int) $paylasim_id;
	if ( $paylasim_id <= 0 ) {
		return false;
	}
	if ( function_exists( 'tilfy_kuyruk_paylasim_iptal' ) ) {
		tilfy_kuyruk_paylasim_iptal( $paylasim_id );
	}
	$wpdb->update(
		tilfy_tablo( 'paylasim' ),
		array(
			'durum'       => 'sirada',
			'hata_mesaji' => '',
			'guncelleme'  => current_time( 'mysql' ),
		),
		array( 'id' => $paylasim_id )
	);
	return true;
}

function tilfy_takvim_paylasim_kuyruga_ac( $paylasim_id ) {
	global $wpdb;
	$paylasim_id = (int) $paylasim_id;
	if ( $paylasim_id <= 0 || ! function_exists( 'tilfy_kuyruk_ekle' ) ) {
		return false;
	}
	$paylasim = $wpdb->get_row(
		$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'paylasim' ) . ' WHERE id = %d', $paylasim_id )
	);
	if ( ! $paylasim ) {
		return false;
	}
	$simdi = current_time( 'mysql' );
	$koru  = ! empty( $paylasim->zamanlama ) ? $paylasim->zamanlama : $simdi;
	$wpdb->update(
		tilfy_tablo( 'paylasim' ),
		array(
			'durum'       => 'beklemede',
			'zamanlama'   => $koru,
			'hata_mesaji' => '',
			'guncelleme'  => $simdi,
		),
		array( 'id' => $paylasim_id )
	);
	tilfy_kuyruk_ekle(
		'paylasim_gonder',
		array(
			'paylasim_id' => $paylasim_id,
			'icerik_id'   => (int) $paylasim->icerik_id,
			'platform'    => sanitize_key( (string) $paylasim->hedef_platform ),
		)
	);
	return true;
}

function tilfy_takvim_sirali_zamanla( $paylasim_idler, $zaman_girdi, $arasi_dakika ) {
	global $wpdb;
	$idler = function_exists( 'tilfy_paylasim_idler_icerik_sirala' )
		? tilfy_paylasim_idler_icerik_sirala( $paylasim_idler )
		: array_values( array_filter( array_map( 'intval', (array) $paylasim_idler ) ) );
	if ( count( $idler ) < 2 ) {
		return new WP_Error( 'tilfy_zamanlama', 'Sirali zamanlama icin en az iki paylasim gerekli' );
	}
	$mysql = tilfy_zamanlama_mysql_cevir( $zaman_girdi );
	if ( ! $mysql || ! tilfy_zamanlama_gelecek_mi( $mysql ) ) {
		return new WP_Error( 'tilfy_zamanlama', 'Gecerli gelecek tarih ve saat gerekli' );
	}
	$ilk = (int) $idler[0];
	$sonuc = tilfy_paylasim_zamanla( $ilk, $zaman_girdi );
	if ( is_wp_error( $sonuc ) ) {
		return $sonuc;
	}
	$bekleyen = array_slice( $idler, 1 );
	$arasi    = max( 1, (int) $arasi_dakika );
	$bas_ts   = tilfy_zamanlama_baslangic_ts( $zaman_girdi );
	if ( $bas_ts <= 0 ) {
		$bas_ts = (int) current_time( 'timestamp' );
	}
	foreach ( $bekleyen as $sira => $pid ) {
		$slot_ts = $bas_ts + ( ( $sira + 1 ) * $arasi * 60 );
		$wpdb->update(
			tilfy_tablo( 'paylasim' ),
			array(
				'durum'       => 'sirada',
				'zamanlama'   => wp_date( 'Y-m-d H:i:s', $slot_ts ),
				'hata_mesaji' => '',
				'guncelleme'  => current_time( 'mysql' ),
			),
			array( 'id' => (int) $pid )
		);
		if ( function_exists( 'tilfy_kuyruk_paylasim_iptal' ) ) {
			tilfy_kuyruk_paylasim_iptal( (int) $pid );
		}
	}
	$ek = array(
		'mod'                   => 'paylasim_sirali',
		'paylasim_arasi_dakika' => $arasi,
		'baslangic_ts'          => $bas_ts > 0 ? $bas_ts : (int) current_time( 'timestamp' ),
	);
	$simdi = current_time( 'mysql' );
	$wpdb->insert(
		tilfy_tablo( 'otomasyon_batch' ),
		array(
			'otomasyon_id'           => 0,
			'durum'                  => 'planlandi',
			'tarama_zamani'          => $simdi,
			'icerik_ids'             => wp_json_encode( $bekleyen ),
			'paylasim_ids'           => wp_json_encode( array( $ilk ) ),
			'baslatilan_sira'        => 0,
			'son_dalga_paylasim_ids' => wp_json_encode( array( $ilk ) ),
			'bekleme_bitis'          => null,
			'ek_veri'                => wp_json_encode( $ek ),
			'olusturulma'            => $simdi,
			'guncelleme'             => $simdi,
		)
	);
	return array(
		'basarili' => count( $idler ),
		'hata'     => 0,
	);
}

function tilfy_takvim_batch_sirali_ilerlet( $batch ) {
	if ( ! $batch ) {
		return array( 'ok' => false, 'adet' => 0 );
	}
	$batch_id = (int) $batch->id;
	if ( function_exists( 'tilfy_otomasyon_batch_lock_al' ) && ! tilfy_otomasyon_batch_lock_al( $batch_id ) ) {
		return array( 'ok' => true, 'adet' => 0 );
	}
	try {
		return tilfy_takvim_batch_sirali_ilerlet_ic(
			function_exists( 'tilfy_otomasyon_batch_al' ) ? tilfy_otomasyon_batch_al( $batch_id ) : $batch
		);
	} finally {
		if ( function_exists( 'tilfy_otomasyon_batch_lock_birak' ) ) {
			tilfy_otomasyon_batch_lock_birak( $batch_id );
		}
	}
}

function tilfy_takvim_batch_sirali_ilerlet_ic( $batch ) {
	global $wpdb;
	if ( ! $batch ) {
		return array( 'ok' => false, 'adet' => 0 );
	}
	$ek = function_exists( 'tilfy_otomasyon_batch_ek_veri_coz' )
		? tilfy_otomasyon_batch_ek_veri_coz( $batch )
		: array();
	if ( ( $ek['mod'] ?? '' ) !== 'paylasim_sirali' ) {
		return array( 'ok' => false, 'adet' => 0 );
	}
	$kuyruk_ids = function_exists( 'tilfy_otomasyon_batch_icerik_ids_coz' )
		? tilfy_otomasyon_batch_icerik_ids_coz( $batch )
		: array();
	$arasi_sn   = max( 60, (int) ( $ek['paylasim_arasi_dakika'] ?? 0 ) * 60 );
	$simdi_ts   = (int) current_time( 'timestamp' );
	$batch_id   = (int) $batch->id;
	if ( function_exists( 'tilfy_otomasyon_batch_son_dalga_bekliyor_mu' ) && tilfy_otomasyon_batch_son_dalga_bekliyor_mu( $batch ) ) {
		return array( 'ok' => true, 'adet' => 0 );
	}
	$bekleme_ham = trim( (string) ( $batch->bekleme_bitis ?? '' ) );
	if ( $bekleme_ham !== '' ) {
		$bekleme_ts = function_exists( 'tilfy_yerel_mysql_ts' ) ? tilfy_yerel_mysql_ts( $bekleme_ham ) : strtotime( $bekleme_ham );
		if ( $bekleme_ts > $simdi_ts ) {
			return array( 'ok' => true, 'adet' => 0 );
		}
		if ( function_exists( 'tilfy_otomasyon_batch_durum_guncelle' ) ) {
			tilfy_otomasyon_batch_durum_guncelle( $batch_id, 'planlandi', null, array( 'bekleme_bitis' => null ) );
			$batch       = function_exists( 'tilfy_otomasyon_batch_al' ) ? tilfy_otomasyon_batch_al( $batch_id ) : $batch;
			$bekleme_ham = '';
		}
	}
	$dalga = function_exists( 'tilfy_otomasyon_batch_son_dalga_ids_coz' )
		? tilfy_otomasyon_batch_son_dalga_ids_coz( $batch )
		: array();
	if ( ! empty( $dalga ) && empty( $kuyruk_ids ) ) {
		if ( $bekleme_ham === '' ) {
			$bitis_ts = function_exists( 'tilfy_otomasyon_batch_dalga_bitis_ts' )
				? tilfy_otomasyon_batch_dalga_bitis_ts( $dalga )
				: $simdi_ts;
			if ( function_exists( 'tilfy_otomasyon_batch_durum_guncelle' ) ) {
				tilfy_otomasyon_batch_durum_guncelle(
					$batch_id,
					'planlandi',
					null,
					array( 'bekleme_bitis' => wp_date( 'Y-m-d H:i:s', $bitis_ts + $arasi_sn ) )
				);
			}
			return array( 'ok' => true, 'adet' => 0 );
		}
		if ( function_exists( 'tilfy_otomasyon_batch_durum_guncelle' ) ) {
			tilfy_otomasyon_batch_durum_guncelle( $batch_id, 'tamamlandi' );
		}
		return array( 'ok' => true, 'adet' => 0 );
	}
	if ( empty( $kuyruk_ids ) ) {
		if ( function_exists( 'tilfy_otomasyon_batch_durum_guncelle' ) ) {
			tilfy_otomasyon_batch_durum_guncelle( $batch_id, 'tamamlandi' );
		}
		return array( 'ok' => true, 'adet' => 0 );
	}
	if ( ! empty( $dalga ) && $bekleme_ham === '' ) {
		$bitis_ts = function_exists( 'tilfy_otomasyon_batch_dalga_bitis_ts' )
			? tilfy_otomasyon_batch_dalga_bitis_ts( $dalga )
			: $simdi_ts;
		if ( function_exists( 'tilfy_otomasyon_batch_durum_guncelle' ) ) {
			tilfy_otomasyon_batch_durum_guncelle(
				$batch_id,
				'planlandi',
				null,
				array( 'bekleme_bitis' => wp_date( 'Y-m-d H:i:s', $bitis_ts + $arasi_sn ) )
			);
		}
		return array( 'ok' => true, 'adet' => 0 );
	}
	$pid = (int) $kuyruk_ids[0];
	$kalan = array_slice( $kuyruk_ids, 1 );
	if ( ! function_exists( 'tilfy_otomasyon_batch_sirada_aktif_et' ) ) {
		return array( 'ok' => false, 'adet' => 0 );
	}
	$aktif = tilfy_otomasyon_batch_sirada_aktif_et( array( $pid ), $batch );
	if ( empty( $aktif ) ) {
		return array( 'ok' => false, 'adet' => 0 );
	}
	$tum = array_merge(
		function_exists( 'tilfy_otomasyon_batch_paylasim_ids_coz' ) ? tilfy_otomasyon_batch_paylasim_ids_coz( $batch ) : array(),
		array( $pid )
	);
	if ( function_exists( 'tilfy_otomasyon_batch_durum_guncelle' ) ) {
		tilfy_otomasyon_batch_durum_guncelle(
			$batch_id,
			'planlandi',
			$tum,
			array(
				'baslatilan_sira'        => (int) ( $batch->baslatilan_sira ?? 0 ) + 1,
				'son_dalga_paylasim_ids' => array( $pid ),
				'bekleme_bitis'          => null,
			)
		);
		$wpdb->update(
			tilfy_tablo( 'otomasyon_batch' ),
			array(
				'icerik_ids' => wp_json_encode( $kalan ),
				'guncelleme' => current_time( 'mysql' ),
			),
			array( 'id' => $batch_id )
		);
	}
	if ( function_exists( 'tilfy_kuyruk_arka_plan_tetik' ) ) {
		tilfy_kuyruk_arka_plan_tetik();
	}
	return array( 'ok' => true, 'adet' => 1 );
}
