<?php

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

function tilfy_tablolari_olustur() {
	global $wpdb;
	$karakter = $wpdb->get_charset_collate();

	$sql_icerik = 'CREATE TABLE ' . tilfy_tablo( 'icerik' ) . " (
		id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
		kaynak_platform varchar(32) NOT NULL DEFAULT '',
		kaynak_id varchar(128) NOT NULL DEFAULT '',
		baslik varchar(500) NOT NULL DEFAULT '',
		aciklama text NOT NULL,
		etiketler text NOT NULL,
		medya_tipi varchar(32) NOT NULL DEFAULT 'video',
		medya_url text NOT NULL,
		medya_dosya_id bigint(20) unsigned NOT NULL DEFAULT 0,
		kapak_url text NOT NULL,
		kapak_dosya_id bigint(20) unsigned NOT NULL DEFAULT 0,
		kaynak_url text NOT NULL,
		kaynak_tarihi datetime DEFAULT NULL,
		durum varchar(32) NOT NULL DEFAULT 'hazir',
		olusturulma datetime NOT NULL,
		guncelleme datetime NOT NULL,
		PRIMARY KEY (id),
		KEY kaynak (kaynak_platform, kaynak_id(64)),
		KEY kaynak_tarihi (kaynak_tarihi),
		KEY durum (durum)
	) {$karakter};";

	$sql_paylasim = 'CREATE TABLE ' . tilfy_tablo( 'paylasim' ) . " (
		id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
		icerik_id bigint(20) unsigned NOT NULL,
		hedef_platform varchar(32) NOT NULL,
		ozel_baslik varchar(500) NOT NULL DEFAULT '',
		ozel_aciklama text NOT NULL,
		ozel_etiketler text NOT NULL,
		platform_ayar text NOT NULL,
		zamanlama datetime DEFAULT NULL,
		durum varchar(32) NOT NULL DEFAULT 'beklemede',
		kaynak varchar(16) NOT NULL DEFAULT 'manuel',
		hedef_id varchar(128) NOT NULL DEFAULT '',
		hedef_url text NOT NULL,
		hata_mesaji text NOT NULL,
		olusturulma datetime NOT NULL,
		guncelleme datetime NOT NULL,
		PRIMARY KEY (id),
		KEY icerik (icerik_id),
		KEY hedef_durum (hedef_platform, durum)
	) {$karakter};";

	$sql_istatistik = 'CREATE TABLE ' . tilfy_tablo( 'istatistik' ) . " (
		id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
		icerik_id bigint(20) unsigned NOT NULL DEFAULT 0,
		platform varchar(32) NOT NULL,
		platform_icerik_id varchar(128) NOT NULL DEFAULT '',
		goruntulenme bigint(20) unsigned NOT NULL DEFAULT 0,
		begeni bigint(20) unsigned NOT NULL DEFAULT 0,
		yorum bigint(20) unsigned NOT NULL DEFAULT 0,
		paylasim bigint(20) unsigned NOT NULL DEFAULT 0,
		kaydetme bigint(20) unsigned NOT NULL DEFAULT 0,
		ek_json longtext NOT NULL,
		son_sync datetime NOT NULL,
		PRIMARY KEY (id),
		UNIQUE KEY platform_icerik (platform, platform_icerik_id(96)),
		KEY icerik (icerik_id)
	) {$karakter};";

	$sql_kuyruk = 'CREATE TABLE ' . tilfy_tablo( 'kuyruk' ) . " (
		id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
		islem varchar(64) NOT NULL,
		payload longtext NOT NULL,
		durum varchar(32) NOT NULL DEFAULT 'beklemede',
		deneme tinyint(3) unsigned NOT NULL DEFAULT 0,
		hata text NOT NULL,
		olusturulma datetime NOT NULL,
		guncelleme datetime NOT NULL,
		PRIMARY KEY (id),
		KEY durum (durum)
	) {$karakter};";

	require_once ABSPATH . 'wp-admin/includes/upgrade.php';
	dbDelta( $sql_icerik );
	dbDelta( $sql_paylasim );
	dbDelta( $sql_istatistik );
	dbDelta( $sql_kuyruk );

	$sql_otomasyon = 'CREATE TABLE ' . tilfy_tablo( 'otomasyon' ) . " (
		id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
		ad varchar(200) NOT NULL DEFAULT '',
		aktif tinyint(1) NOT NULL DEFAULT 1,
		tip varchar(32) NOT NULL DEFAULT 'capraz',
		kaynak_platform varchar(32) NOT NULL DEFAULT '',
		medya_format varchar(16) NOT NULL DEFAULT 'tumu',
		gecikme_saat decimal(8,2) NOT NULL DEFAULT 0,
		hedef_platformlar text NOT NULL,
		platform_ayar text NOT NULL,
		kontrol_dakika smallint(5) unsigned NOT NULL DEFAULT 15,
		islem_adedi smallint(5) unsigned NOT NULL DEFAULT 1,
		paylasim_arasi_dakika smallint(5) unsigned NOT NULL DEFAULT 0,
		gunluk_adet smallint(5) unsigned NOT NULL DEFAULT 1,
		baslangic_tarihi date DEFAULT NULL,
		son_kontrol datetime DEFAULT NULL,
		olusturulma datetime NOT NULL,
		guncelleme datetime NOT NULL,
		PRIMARY KEY (id),
		KEY aktif (aktif),
		KEY kaynak (kaynak_platform),
		KEY tip (tip)
	) {$karakter};";

	$sql_otomasyon_kayit = 'CREATE TABLE ' . tilfy_tablo( 'otomasyon_kayit' ) . " (
		id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
		otomasyon_id bigint(20) unsigned NOT NULL,
		icerik_id bigint(20) unsigned NOT NULL,
		paylasim_ids text NOT NULL,
		durum varchar(32) NOT NULL DEFAULT 'beklemede',
		olusturulma datetime NOT NULL,
		PRIMARY KEY (id),
		UNIQUE KEY kural_icerik (otomasyon_id, icerik_id),
		KEY icerik (icerik_id)
	) {$karakter};";

	$sql_otomasyon_batch = 'CREATE TABLE ' . tilfy_tablo( 'otomasyon_batch' ) . " (
		id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
		otomasyon_id bigint(20) unsigned NOT NULL,
		durum varchar(32) NOT NULL DEFAULT 'bekliyor',
		tarama_zamani datetime NOT NULL,
		icerik_ids text NOT NULL,
		paylasim_ids text NOT NULL,
		baslatilan_sira smallint(5) unsigned NOT NULL DEFAULT 0,
		son_dalga_paylasim_ids text NOT NULL,
		bekleme_bitis datetime DEFAULT NULL,
		ek_veri text NOT NULL,
		olusturulma datetime NOT NULL,
		guncelleme datetime NOT NULL,
		PRIMARY KEY (id),
		KEY otomasyon_durum (otomasyon_id, durum)
	) {$karakter};";

	dbDelta( $sql_otomasyon );
	dbDelta( $sql_otomasyon_kayit );
	dbDelta( $sql_otomasyon_batch );
}

function tilfy_veritabani_migrate() {
	global $wpdb;
	$wpdb->query( 'UPDATE ' . tilfy_tablo( 'icerik' ) . ' SET kaynak_tarihi = olusturulma WHERE kaynak_tarihi IS NULL' );
	$icerik_t = tilfy_tablo( 'icerik' );
	$kolon    = $wpdb->get_results( "SHOW COLUMNS FROM {$icerik_t} LIKE 'kaynak_url'" );
	if ( empty( $kolon ) ) {
		$wpdb->query( "ALTER TABLE {$icerik_t} ADD kaynak_url text NOT NULL AFTER kapak_url" );
	}
	$wpdb->query(
		"UPDATE {$icerik_t} SET kaynak_url = CONCAT('https://www.youtube.com/watch?v=', kaynak_id)
		WHERE kaynak_platform = 'youtube' AND kaynak_id != '' AND (kaynak_url IS NULL OR kaynak_url = '')"
	);
	$wpdb->query(
		"UPDATE {$icerik_t} SET kaynak_url = medya_url
		WHERE kaynak_platform = 'youtube' AND medya_url LIKE '%youtube.com/watch%' AND (kaynak_url IS NULL OR kaynak_url = '')"
	);
	$otomasyon_t = tilfy_tablo( 'otomasyon' );
	if ( ! $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $otomasyon_t ) ) ) {
		tilfy_tablolari_olustur();
	}
	$kolon = $wpdb->get_results( "SHOW COLUMNS FROM {$otomasyon_t} LIKE 'islem_adedi'" );
	if ( empty( $kolon ) ) {
		$wpdb->query( "ALTER TABLE {$otomasyon_t} ADD islem_adedi smallint(5) unsigned NOT NULL DEFAULT 1 AFTER kontrol_dakika" );
	}
	$kolon = $wpdb->get_results( "SHOW COLUMNS FROM {$otomasyon_t} LIKE 'paylasim_arasi_dakika'" );
	if ( empty( $kolon ) ) {
		$wpdb->query( "ALTER TABLE {$otomasyon_t} ADD paylasim_arasi_dakika smallint(5) unsigned NOT NULL DEFAULT 0 AFTER islem_adedi" );
	}
	$kolon = $wpdb->get_results( "SHOW COLUMNS FROM {$otomasyon_t} LIKE 'baslangic_tarihi'" );
	if ( empty( $kolon ) ) {
		$wpdb->query( "ALTER TABLE {$otomasyon_t} ADD baslangic_tarihi date DEFAULT NULL AFTER paylasim_arasi_dakika" );
	}
	$kolon = $wpdb->get_results( "SHOW COLUMNS FROM {$otomasyon_t} LIKE 'gunluk_adet'" );
	if ( empty( $kolon ) ) {
		$wpdb->query( "ALTER TABLE {$otomasyon_t} ADD gunluk_adet smallint(5) unsigned NOT NULL DEFAULT 1 AFTER paylasim_arasi_dakika" );
	}
	$kolon = $wpdb->get_results( "SHOW COLUMNS FROM {$otomasyon_t} LIKE 'tip'" );
	if ( empty( $kolon ) ) {
		$wpdb->query( "ALTER TABLE {$otomasyon_t} ADD tip varchar(32) NOT NULL DEFAULT 'capraz' AFTER aktif" );
		$wpdb->query( "ALTER TABLE {$otomasyon_t} ADD KEY tip (tip)" );
	}
	$paylasim_t = tilfy_tablo( 'paylasim' );
	$kolon      = $wpdb->get_results( "SHOW COLUMNS FROM {$paylasim_t} LIKE 'kaynak'" );
	if ( empty( $kolon ) ) {
		$wpdb->query( "ALTER TABLE {$paylasim_t} ADD kaynak varchar(16) NOT NULL DEFAULT 'manuel' AFTER durum" );
	}
	$kolon = $wpdb->get_results( "SHOW COLUMNS FROM {$icerik_t} LIKE 'kapak_dosya_id'" );
	if ( empty( $kolon ) ) {
		$wpdb->query( "ALTER TABLE {$icerik_t} ADD kapak_dosya_id bigint(20) unsigned NOT NULL DEFAULT 0 AFTER kapak_url" );
	}
	$batch_t = tilfy_tablo( 'otomasyon_batch' );
	if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $batch_t ) ) !== $batch_t ) {
		tilfy_tablolari_olustur();
	}
	$kolon = $wpdb->get_results( "SHOW COLUMNS FROM {$batch_t} LIKE 'baslatilan_sira'" );
	if ( empty( $kolon ) ) {
		$wpdb->query( "ALTER TABLE {$batch_t} ADD baslatilan_sira smallint(5) unsigned NOT NULL DEFAULT 0 AFTER paylasim_ids" );
		$wpdb->query( "ALTER TABLE {$batch_t} ADD son_dalga_paylasim_ids text NOT NULL AFTER baslatilan_sira" );
		$wpdb->query( "ALTER TABLE {$batch_t} ADD bekleme_bitis datetime DEFAULT NULL AFTER son_dalga_paylasim_ids" );
		$wpdb->query( "ALTER TABLE {$batch_t} ADD ek_veri text NOT NULL AFTER bekleme_bitis" );
		$wpdb->query( "UPDATE {$batch_t} SET son_dalga_paylasim_ids = '[]', ek_veri = '' WHERE son_dalga_paylasim_ids = '' OR son_dalga_paylasim_ids IS NULL" );
	}
	tilfy_batch_legacy_migrate_planlandi();
}

function tilfy_batch_legacy_migrate_planlandi() {
	global $wpdb;
	$batch_t    = tilfy_tablo( 'otomasyon_batch' );
	$paylasim_t = tilfy_tablo( 'paylasim' );
	if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $batch_t ) ) !== $batch_t ) {
		return;
	}
	if ( empty( $wpdb->get_results( "SHOW COLUMNS FROM {$batch_t} LIKE 'baslatilan_sira'" ) ) ) {
		return;
	}
	$satirlar = $wpdb->get_results(
		"SELECT * FROM {$batch_t} WHERE durum = 'planlandi' AND baslatilan_sira = 0 AND paylasim_ids IS NOT NULL AND paylasim_ids <> '' AND paylasim_ids <> '[]'"
	);
	$terminal = array( 'yuklendi', 'manuel_bekliyor', 'hata' );
	$simdi    = current_time( 'mysql' );
	foreach ( (array) $satirlar as $batch ) {
		$icerik_ids = json_decode( (string) ( $batch->icerik_ids ?? '' ), true );
		$icerik_ids = is_array( $icerik_ids ) ? array_values( array_filter( array_map( 'intval', $icerik_ids ) ) ) : array();
		$paylasim_ids = json_decode( (string) ( $batch->paylasim_ids ?? '' ), true );
		$paylasim_ids = is_array( $paylasim_ids ) ? array_values( array_filter( array_map( 'intval', $paylasim_ids ) ) ) : array();
		if ( empty( $paylasim_ids ) ) {
			continue;
		}
		$in = tilfy_sql_in_ints( $paylasim_ids );
		if ( ! $in ) {
			continue;
		}
		$rows = $wpdb->get_results(
			$wpdb->prepare(
				"SELECT id, icerik_id, durum FROM {$paylasim_t} WHERE id IN ({$in['yer']}) ORDER BY id ASC",
				$in['degerler']
			)
		);
		$by_icerik = array();
		foreach ( (array) $rows as $row ) {
			$cid = (int) $row->icerik_id;
			if ( ! isset( $by_icerik[ $cid ] ) ) {
				$by_icerik[ $cid ] = array();
			}
			$by_icerik[ $cid ][] = (int) $row->id;
		}
		$son_dalga = array();
		foreach ( array_reverse( $icerik_ids ) as $cid ) {
			if ( ! empty( $by_icerik[ $cid ] ) ) {
				$son_dalga = $by_icerik[ $cid ];
				break;
			}
		}
		if ( empty( $son_dalga ) && ! empty( $by_icerik ) ) {
			$keys      = array_keys( $by_icerik );
			$son_dalga = $by_icerik[ (int) end( $keys ) ];
		}
		$all_terminal = ! empty( $rows );
		foreach ( (array) $rows as $row ) {
			if ( ! in_array( (string) $row->durum, $terminal, true ) ) {
				$all_terminal = false;
				break;
			}
		}
		$satir = array(
			'baslatilan_sira'        => count( $icerik_ids ),
			'son_dalga_paylasim_ids' => wp_json_encode( $son_dalga ),
			'guncelleme'             => $simdi,
		);
		if ( $all_terminal ) {
			$satir['durum'] = 'tamamlandi';
		}
		$wpdb->update( $batch_t, $satir, array( 'id' => (int) $batch->id ) );
	}
}

function tilfy_icerik_upsert( $veri ) {
	global $wpdb;
	$platform = sanitize_key( $veri['kaynak_platform'] ?? '' );
	$kaynak_id = sanitize_text_field( $veri['kaynak_id'] ?? '' );
	if ( $platform === '' || $kaynak_id === '' ) {
		return tilfy_icerik_kaydet( $veri );
	}
	$mevcut_id = (int) $wpdb->get_var(
		$wpdb->prepare(
			'SELECT id FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE kaynak_platform = %s AND kaynak_id = %s',
			$platform,
			$kaynak_id
		)
	);
	if ( $mevcut_id > 0 ) {
		$eski_durum = (string) $wpdb->get_var(
			$wpdb->prepare(
				'SELECT durum FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d',
				$mevcut_id
			)
		);
		if ( $eski_durum === 'gizli' ) {
			unset( $veri['durum'] );
		}
		$veri['id'] = $mevcut_id;
	}
	return tilfy_icerik_kaydet( $veri );
}

function tilfy_icerik_kaydet( $veri ) {
	global $wpdb;
	$simdi = current_time( 'mysql' );
	$id    = (int) ( $veri['id'] ?? 0 );
	$satir = array(
		'kaynak_platform' => sanitize_key( $veri['kaynak_platform'] ?? '' ),
		'kaynak_id'       => sanitize_text_field( $veri['kaynak_id'] ?? '' ),
		'baslik'          => sanitize_text_field( $veri['baslik'] ?? '' ),
		'aciklama'        => wp_kses_post( $veri['aciklama'] ?? '' ),
		'etiketler'       => sanitize_textarea_field( $veri['etiketler'] ?? '' ),
		'medya_tipi'      => sanitize_key( $veri['medya_tipi'] ?? 'video' ),
		'medya_url'       => esc_url_raw( $veri['medya_url'] ?? '' ),
		'medya_dosya_id'  => (int) ( $veri['medya_dosya_id'] ?? 0 ),
		'kapak_url'       => esc_url_raw( $veri['kapak_url'] ?? '' ),
		'kapak_dosya_id'  => (int) ( $veri['kapak_dosya_id'] ?? 0 ),
		'kaynak_url'      => esc_url_raw( $veri['kaynak_url'] ?? '' ),
		'guncelleme'      => $simdi,
	);
	if ( array_key_exists( 'durum', $veri ) ) {
		$satir['durum'] = sanitize_key( (string) $veri['durum'] );
	} elseif ( $id <= 0 ) {
		$satir['durum'] = 'hazir';
	}
	if ( array_key_exists( 'kaynak_tarihi', $veri ) ) {
		$ham_tarih = tilfy_mysql_tarih_al( $veri['kaynak_tarihi'] );
		if ( $ham_tarih !== null ) {
			$satir['kaynak_tarihi'] = $ham_tarih;
		}
	}

	if ( $id > 0 ) {
		$mevcut = $wpdb->get_row(
			$wpdb->prepare(
				'SELECT medya_dosya_id, medya_url, medya_tipi, kapak_url, kapak_dosya_id FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d',
				$id
			)
		);
		if ( $mevcut && (int) ( $mevcut->medya_dosya_id ?? 0 ) > 0 && (int) $satir['medya_dosya_id'] <= 0 ) {
			$satir['medya_dosya_id'] = (int) $mevcut->medya_dosya_id;
			if ( trim( (string) ( $mevcut->medya_url ?? '' ) ) !== '' ) {
				$satir['medya_url'] = (string) $mevcut->medya_url;
			}
			if ( trim( (string) ( $mevcut->medya_tipi ?? '' ) ) !== '' ) {
				$satir['medya_tipi'] = sanitize_key( (string) $mevcut->medya_tipi );
			}
		}
		$kapak_korundu = false;
		if ( $mevcut && (int) ( $mevcut->kapak_dosya_id ?? 0 ) > 0 && (int) $satir['kapak_dosya_id'] <= 0 ) {
			$satir['kapak_dosya_id'] = (int) $mevcut->kapak_dosya_id;
			if ( trim( (string) ( $mevcut->kapak_url ?? '' ) ) !== '' ) {
				$satir['kapak_url'] = (string) $mevcut->kapak_url;
			}
			$kapak_korundu = true;
		}
		if ( ! $kapak_korundu && ( ! array_key_exists( 'kapak_url', $veri ) || trim( (string) ( $veri['kapak_url'] ?? '' ) ) === '' ) ) {
			unset( $satir['kapak_url'] );
		}
		if ( ! $kapak_korundu && ( ! array_key_exists( 'kapak_dosya_id', $veri ) || (int) ( $veri['kapak_dosya_id'] ?? 0 ) <= 0 ) ) {
			unset( $satir['kapak_dosya_id'] );
		}
		$wpdb->update( tilfy_tablo( 'icerik' ), $satir, array( 'id' => $id ) );
		return $id;
	}

	$satir['olusturulma'] = $simdi;
	$wpdb->insert( tilfy_tablo( 'icerik' ), $satir );
	return (int) $wpdb->insert_id;
}

function tilfy_mysql_tarih_al( $ham ) {
	if ( $ham === null || $ham === '' ) {
		return null;
	}
	if ( is_numeric( $ham ) ) {
		return gmdate( 'Y-m-d H:i:s', (int) $ham );
	}
	$ts = strtotime( (string) $ham );
	if ( ! $ts ) {
		return null;
	}
	return gmdate( 'Y-m-d H:i:s', $ts );
}

function tilfy_icerik_liste_filtre_sql( $args = array() ) {
	global $wpdb;
	$platform      = isset( $args['platform'] ) ? sanitize_key( $args['platform'] ) : '';
	$platformlar_liste = array();
	if ( ! empty( $args['platformlar'] ) && is_array( $args['platformlar'] ) ) {
		foreach ( $args['platformlar'] as $pl ) {
			$pl = sanitize_key( (string) $pl );
			if ( $pl !== '' ) {
				$platformlar_liste[] = $pl;
			}
		}
		$platformlar_liste = array_values( array_unique( $platformlar_liste ) );
	}
	$senkron       = sanitize_key( (string) ( $args['senkron'] ?? '' ) );
	$senkron_hedef = sanitize_key( (string) ( $args['senkron_hedef'] ?? '' ) );
	$sql           = '';
	$degerler      = array();
	if ( ! empty( $platformlar_liste ) ) {
		$yer = implode( ',', array_fill( 0, count( $platformlar_liste ), '%s' ) );
		$sql        .= " AND i.kaynak_platform IN ($yer)";
		$degerler    = array_merge( $degerler, $platformlar_liste );
	} elseif ( $platform !== '' && $platform !== 'tumu' ) {
		$sql       .= ' AND i.kaynak_platform = %s';
		$degerler[] = $platform;
	}
	if ( in_array( $senkron, array( 'var', 'yok' ), true ) && $senkron_hedef !== '' && tilfy_platform_aktif_mi( $senkron_hedef ) ) {
		$pt = tilfy_tablo( 'paylasim' );
		if ( $senkron === 'var' ) {
			$sql .= " AND EXISTS (SELECT 1 FROM {$pt} p WHERE p.icerik_id = i.id AND p.hedef_platform = %s AND p.durum = 'yuklendi')";
		} else {
			$sql .= " AND NOT EXISTS (SELECT 1 FROM {$pt} p WHERE p.icerik_id = i.id AND p.hedef_platform = %s AND p.durum = 'yuklendi')";
		}
		$degerler[] = $senkron_hedef;
	}
	$tarih_bas = sanitize_text_field( (string) ( $args['tarih_baslangic'] ?? '' ) );
	if ( preg_match( '/^\d{4}-\d{2}-\d{2}$/', $tarih_bas ) ) {
		$sql       .= ' AND COALESCE(i.kaynak_tarihi, i.olusturulma) >= %s';
		$degerler[] = $tarih_bas . ' 00:00:00';
	}
	$arama = sanitize_text_field( (string) ( $args['arama'] ?? '' ) );
	if ( $arama !== '' ) {
		$like = '%' . $wpdb->esc_like( $arama ) . '%';
		$sql .= ' AND (i.baslik LIKE %s OR i.aciklama LIKE %s)';
		$degerler[] = $like;
		$degerler[] = $like;
	}
	$gizli = ! empty( $args['gizli'] );
	$gizli_dahil = ! empty( $args['gizli_dahil'] );
	if ( $gizli ) {
		$sql .= " AND i.durum = 'gizli'";
	} elseif ( ! $gizli_dahil ) {
		$sql .= " AND i.durum <> 'gizli'";
	}
	$medya_grup = sanitize_key( (string) ( $args['medya_grup'] ?? '' ) );
	if ( $medya_grup === 'gorsel' ) {
		$sql .= " AND LOWER(i.medya_tipi) IN ('image','photo','carousel_album','gorsel','thumbnail','album')";
	} elseif ( $medya_grup === 'video' ) {
		$sql .= " AND LOWER(i.medya_tipi) NOT IN ('image','photo','carousel_album','gorsel','thumbnail','album')";
	} elseif ( $medya_grup === 'kapaksiz' ) {
		$sql .= " AND (i.medya_dosya_id IS NULL OR i.medya_dosya_id = 0)
			AND (i.medya_url IS NULL OR i.medya_url = '')
			AND (i.kapak_url IS NULL OR i.kapak_url = '')";
	}
	return array( 'sql' => $sql, 'degerler' => $degerler );
}

function tilfy_icerik_say( $args = array() ) {
	global $wpdb;
	$filtre = tilfy_icerik_liste_filtre_sql( $args );
	$sql    = 'SELECT COUNT(*) FROM ' . tilfy_tablo( 'icerik' ) . ' i WHERE 1=1' . $filtre['sql'];
	if ( $filtre['degerler'] ) {
		return (int) $wpdb->get_var( $wpdb->prepare( $sql, $filtre['degerler'] ) );
	}
	return (int) $wpdb->get_var( $sql );
}

function tilfy_icerik_listele( $args = array() ) {
	global $wpdb;
	$per_page = max( 1, (int) ( $args['per_page'] ?? 100 ) );
	$page     = max( 1, (int) ( $args['page'] ?? 1 ) );
	$offset   = ( $page - 1 ) * $per_page;
	$sira     = ( isset( $args['sira'] ) && $args['sira'] === 'eski' ) ? 'ASC' : 'DESC';
	$filtre   = tilfy_icerik_liste_filtre_sql( $args );
	$sql      = 'SELECT i.* FROM ' . tilfy_tablo( 'icerik' ) . ' i WHERE 1=1' . $filtre['sql'];
	$sql     .= ' ORDER BY COALESCE(i.kaynak_tarihi, i.olusturulma) ' . $sira . ' LIMIT %d OFFSET %d';
	$degerler = array_merge( $filtre['degerler'], array( $per_page, $offset ) );
	return $wpdb->get_results( $wpdb->prepare( $sql, $degerler ) );
}

function tilfy_icerik_gizli_say() {
	return tilfy_icerik_say( array( 'gizli' => true ) );
}

function tilfy_icerik_gizli_listele( $args = array() ) {
	$args['gizli'] = true;
	return tilfy_icerik_listele( $args );
}

function tilfy_icerik_gizle( $icerik_idler ) {
	return tilfy_icerik_durum_toplu( $icerik_idler, 'gizli' );
}

function tilfy_icerik_gizliden_cikar( $icerik_idler ) {
	return tilfy_icerik_durum_toplu( $icerik_idler, 'senkron' );
}

function tilfy_icerik_durum_toplu( $icerik_idler, $durum ) {
	global $wpdb;
	$durum = sanitize_key( (string) $durum );
	if ( ! in_array( $durum, array( 'gizli', 'senkron' ), true ) ) {
		return 0;
	}
	$icerik_idler = array_values( array_filter( array_map( 'intval', (array) $icerik_idler ) ) );
	if ( empty( $icerik_idler ) ) {
		return 0;
	}
	$yer_tutucular = implode( ',', array_fill( 0, count( $icerik_idler ), '%d' ) );
	$simdi         = current_time( 'mysql' );
	$sql           = 'UPDATE ' . tilfy_tablo( 'icerik' ) . " SET durum = %s, guncelleme = %s WHERE id IN ({$yer_tutucular})";
	$degerler      = array_merge( array( $durum, $simdi ), $icerik_idler );
	return (int) $wpdb->query( $wpdb->prepare( $sql, $degerler ) );
}

function tilfy_icerik_paylasim_etiketleri( $icerik_idler ) {
	global $wpdb;
	$icerik_idler = array_values( array_filter( array_map( 'intval', (array) $icerik_idler ) ) );
	if ( empty( $icerik_idler ) ) {
		return array();
	}
	$placeholders = implode( ',', array_fill( 0, count( $icerik_idler ), '%d' ) );
	$durumlar     = function_exists( 'tilfy_yinelenen_aktif_durumlar' )
		? tilfy_yinelenen_aktif_durumlar()
		: array( 'beklemede', 'yukleniyor', 'zamanlandi', 'sirada', 'yuklendi', 'manuel_bekliyor' );
	$durumlar     = array_values( array_filter( array_map( 'sanitize_key', (array) $durumlar ) ) );
	if ( empty( $durumlar ) ) {
		return array();
	}
	$durum_yer = implode( ',', array_fill( 0, count( $durumlar ), '%s' ) );
	$sql       = 'SELECT icerik_id, hedef_platform, durum FROM ' . tilfy_tablo( 'paylasim' ) . " WHERE durum IN ({$durum_yer}) AND icerik_id IN ($placeholders)";
	$satirlar  = $wpdb->get_results( $wpdb->prepare( $sql, array_merge( $durumlar, $icerik_idler ) ) );
	$harita       = array();
	foreach ( (array) $satirlar as $satir ) {
		$cid = (int) $satir->icerik_id;
		if ( ! isset( $harita[ $cid ] ) ) {
			$harita[ $cid ] = array();
		}
		$pl = sanitize_key( (string) $satir->hedef_platform );
		if ( $pl !== '' && ! in_array( $pl, $harita[ $cid ], true ) ) {
			$harita[ $cid ][] = $pl;
		}
	}
	return $harita;
}

function tilfy_icerik_paylasim_durum_haritasi( $icerik_idler ) {
	global $wpdb;
	$icerik_idler = array_values( array_filter( array_map( 'intval', (array) $icerik_idler ) ) );
	if ( empty( $icerik_idler ) ) {
		return array();
	}
	$placeholders = implode( ',', array_fill( 0, count( $icerik_idler ), '%d' ) );
	$sql          = 'SELECT icerik_id, hedef_platform, durum FROM ' . tilfy_tablo( 'paylasim' ) . " WHERE durum IN ('beklemede','yukleniyor','zamanlandi','sirada','yuklendi','manuel_bekliyor','hata') AND icerik_id IN ($placeholders)";
	$satirlar     = $wpdb->get_results( $wpdb->prepare( $sql, $icerik_idler ) );
	$harita       = array();
	foreach ( (array) $satirlar as $satir ) {
		$cid = (int) $satir->icerik_id;
		if ( ! isset( $harita[ $cid ] ) ) {
			$harita[ $cid ] = array();
		}
		$pl = sanitize_key( (string) $satir->hedef_platform );
		if ( $pl !== '' ) {
			$harita[ $cid ][ $pl ] = sanitize_key( (string) $satir->durum );
		}
	}
	return $harita;
}

function tilfy_paylasim_ekle_lock_al( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return false;
	}
	$key = 'tilfy_pe_' . $icerik_id;
	return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT GET_LOCK(%s, 5)', $key ) ) === 1;
}

function tilfy_paylasim_ekle_lock_birak( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return;
	}
	$key = 'tilfy_pe_' . $icerik_id;
	$wpdb->query( $wpdb->prepare( 'SELECT RELEASE_LOCK(%s)', $key ) );
}

function tilfy_paylasim_ekle( $icerik_id, $platformlar, $ortak = array(), $ozel = array(), $zorla = false, $arka_plan = false ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return array();
	}
	if ( ! tilfy_paylasim_ekle_lock_al( $icerik_id ) ) {
		if ( function_exists( 'tilfy_islem_log' ) ) {
			tilfy_islem_log(
				'paylasim',
				'Paylasim kilidi alinamadi (icerik #' . $icerik_id . ')',
				array( 'icerik_id' => $icerik_id )
			);
		}
		$GLOBALS['tilfy_paylasim_ekle_sonuc'] = array(
			'uyarilar'   => array( 'Paylasim kilidi alinamadi, tekrar deneyin' ),
			'engellenen' => array(),
		);
		return array();
	}
	try {
		return tilfy_paylasim_ekle_ic( $icerik_id, $platformlar, $ortak, $ozel, $zorla, $arka_plan );
	} finally {
		tilfy_paylasim_ekle_lock_birak( $icerik_id );
	}
}

function tilfy_paylasim_ekle_ic( $icerik_id, $platformlar, $ortak = array(), $ozel = array(), $zorla = false, $arka_plan = false ) {
	global $wpdb;
	$simdi      = current_time( 'mysql' );
	$eklenen    = array();
	$uyarilar   = array();
	$engellenen = array();
	$icerik_id  = (int) $icerik_id;

	$filtre = function_exists( 'tilfy_paylasim_platform_yinelenen_filtre' )
		? tilfy_paylasim_platform_yinelenen_filtre( $icerik_id, $platformlar, $zorla, $arka_plan )
		: array(
			'platformlar' => (array) $platformlar,
			'uyarilar'    => array(),
			'engellenen'  => array(),
		);
	$platformlar = $filtre['platformlar'];
	$uyarilar    = array_merge( $uyarilar, (array) ( $filtre['uyarilar'] ?? array() ) );
	$engellenen  = array_merge( $engellenen, (array) ( $filtre['engellenen'] ?? array() ) );

	foreach ( (array) $platformlar as $platform ) {
		$platform = sanitize_key( $platform );
		if ( ! tilfy_platform_aktif_mi( $platform ) ) {
			continue;
		}
		$kart = $ozel[ $platform ] ?? array();
		$ayar = array();
		if ( function_exists( 'tilfy_paylasim_ayar_temizle' ) && ! empty( $kart['ayar'] ) ) {
			$ayar = tilfy_paylasim_ayar_temizle( $platform, $kart['ayar'] );
		}
		$zamanlama_mysql = null;
		if ( ! empty( $ortak['zamanlama'] ) && function_exists( 'tilfy_zamanlama_mysql_cevir' ) ) {
			$zamanlama_mysql = tilfy_zamanlama_mysql_cevir( $ortak['zamanlama'] );
		}
		$kaynak = sanitize_key( (string) ( $ortak['kaynak'] ?? 'manuel' ) );
		if ( ! in_array( $kaynak, array( 'manuel', 'otomasyon' ), true ) ) {
			$kaynak = 'manuel';
		}
		$durum        = 'beklemede';
		$kuyruga_ekle = true;
		if ( ! empty( $ortak['sirali_bekle'] ) ) {
			$durum        = 'sirada';
			$kuyruga_ekle = false;
			$zamanlama_mysql = null;
			if ( ! empty( $ortak['takvim_gun'] ) ) {
				if ( function_exists( 'tilfy_zamanlama_mysql_cevir' ) ) {
					$zamanlama_mysql = tilfy_zamanlama_mysql_cevir( $ortak['takvim_gun'] );
				}
				if ( ! $zamanlama_mysql && preg_match( '/^\d{4}-\d{2}-\d{2}/', (string) $ortak['takvim_gun'] ) ) {
					$zamanlama_mysql = sanitize_text_field( (string) $ortak['takvim_gun'] );
				}
			}
		} elseif ( $zamanlama_mysql && function_exists( 'tilfy_zamanlama_gelecek_mi' ) && tilfy_zamanlama_gelecek_mi( $zamanlama_mysql ) ) {
			$durum        = 'zamanlandi';
			$kuyruga_ekle = false;
		} else {
			$zamanlama_mysql = null;
		}
		if ( ! $zorla ) {
			$aktif_id = (int) $wpdb->get_var(
				$wpdb->prepare(
					"SELECT id FROM " . tilfy_tablo( 'paylasim' ) . " WHERE icerik_id = %d AND hedef_platform = %s AND durum IN ('beklemede','yukleniyor','zamanlandi','sirada') LIMIT 1",
					$icerik_id,
					$platform
				)
			);
			if ( $aktif_id > 0 ) {
				$engellenen[] = array(
					'platform' => $platform,
					'mesaj'    => '#' . $icerik_id . ' → ' . $platform . ' zaten aktif paylasimda',
				);
				continue;
			}
		}
		$wpdb->insert(
			tilfy_tablo( 'paylasim' ),
			array(
				'icerik_id'       => $icerik_id,
				'hedef_platform'  => $platform,
				'ozel_baslik'     => sanitize_text_field( $kart['baslik'] ?? ( $ortak['baslik'] ?? '' ) ),
				'ozel_aciklama'   => wp_kses_post( $kart['aciklama'] ?? ( $ortak['aciklama'] ?? '' ) ),
				'ozel_etiketler'  => sanitize_textarea_field( $kart['etiketler'] ?? ( $ortak['etiketler'] ?? '' ) ),
				'platform_ayar'   => wp_json_encode( $ayar ),
				'zamanlama'       => $zamanlama_mysql,
				'durum'           => $durum,
				'kaynak'          => $kaynak,
				'hedef_id'        => '',
				'hedef_url'       => '',
				'hata_mesaji'     => '',
				'olusturulma'     => $simdi,
				'guncelleme'      => $simdi,
			)
		);
		$paylasim_id = (int) $wpdb->insert_id;
		if ( $paylasim_id > 0 ) {
			$eklenen[] = $paylasim_id;
			if ( $kuyruga_ekle && function_exists( 'tilfy_kuyruk_ekle' ) ) {
				tilfy_kuyruk_ekle(
					'paylasim_gonder',
					array(
						'paylasim_id' => $paylasim_id,
						'icerik_id'   => $icerik_id,
						'platform'    => $platform,
					)
				);
			}
		}
	}
	$GLOBALS['tilfy_paylasim_ekle_sonuc'] = array(
		'uyarilar'   => $uyarilar,
		'engellenen' => $engellenen,
	);
	return $eklenen;
}

function tilfy_paylasim_ekle_sonuc() {
	$sonuc = $GLOBALS['tilfy_paylasim_ekle_sonuc'] ?? array();
	return is_array( $sonuc ) ? $sonuc : array(
		'uyarilar'   => array(),
		'engellenen' => array(),
	);
}

function tilfy_istatistik_guncelle( $satir ) {
	global $wpdb;
	$simdi = current_time( 'mysql' );
	$veri  = array(
		'icerik_id'          => (int) ( $satir['icerik_id'] ?? 0 ),
		'platform'           => sanitize_key( $satir['platform'] ?? '' ),
		'platform_icerik_id' => sanitize_text_field( $satir['platform_icerik_id'] ?? '' ),
		'goruntulenme'       => (int) ( $satir['goruntulenme'] ?? 0 ),
		'begeni'             => (int) ( $satir['begeni'] ?? 0 ),
		'yorum'              => (int) ( $satir['yorum'] ?? 0 ),
		'paylasim'           => (int) ( $satir['paylasim'] ?? 0 ),
		'kaydetme'           => (int) ( $satir['kaydetme'] ?? 0 ),
		'ek_json'            => wp_json_encode( $satir['ek_json'] ?? array() ),
		'son_sync'           => $simdi,
	);

	$mevcut = $wpdb->get_var(
		$wpdb->prepare(
			'SELECT id FROM ' . tilfy_tablo( 'istatistik' ) . ' WHERE platform = %s AND platform_icerik_id = %s',
			$veri['platform'],
			$veri['platform_icerik_id']
		)
	);

	if ( $mevcut ) {
		$wpdb->update( tilfy_tablo( 'istatistik' ), $veri, array( 'id' => (int) $mevcut ) );
		return (int) $mevcut;
	}

	$wpdb->insert( tilfy_tablo( 'istatistik' ), $veri );
	return (int) $wpdb->insert_id;
}

function tilfy_icerik_idlerden( $idler ) {
	global $wpdb;
	$idler = array_values( array_filter( array_map( 'intval', (array) $idler ) ) );
	if ( empty( $idler ) ) {
		return array();
	}
	$yer_tutucular = implode( ',', array_fill( 0, count( $idler ), '%d' ) );
	$rows          = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . " WHERE id IN ($yer_tutucular)", $idler ) );
	$harita        = array();
	foreach ( (array) $rows as $satir ) {
		$harita[ (int) $satir->id ] = $satir;
	}
	$sirali = array();
	foreach ( $idler as $id ) {
		if ( isset( $harita[ $id ] ) ) {
			$sirali[] = $harita[ $id ];
		}
	}
	return $sirali;
}

function tilfy_paylasim_liste_filtre_sql( $args = array() ) {
	global $wpdb;
	$args = wp_parse_args(
		is_array( $args ) ? $args : array(),
		array(
			'durum'          => '',
			'hedef_platform' => '',
			'gizle_yuklendi' => false,
			'arama'          => '',
			'grup'           => '',
		)
	);
	$where = array( '1=1' );
	$bind  = array();
	if ( $args['durum'] !== '' ) {
		$where[] = 'p.durum = %s';
		$bind[]  = sanitize_key( $args['durum'] );
	}
	$grup = sanitize_key( (string) ( $args['grup'] ?? '' ) );
	if ( $grup === 'bekleyen' ) {
		$where[] = "p.durum IN ('beklemede','yukleniyor','zamanlandi','sirada')";
	}
	if ( $args['hedef_platform'] !== '' ) {
		$where[] = 'p.hedef_platform = %s';
		$bind[]  = sanitize_key( $args['hedef_platform'] );
	}
	if ( ! empty( $args['gizle_yuklendi'] ) ) {
		$where[] = "p.durum NOT IN ('yuklendi','manuel_bekliyor')";
	}
	if ( $args['arama'] !== '' ) {
		$where[] = '(i.baslik LIKE %s OR i.aciklama LIKE %s OR p.hata_mesaji LIKE %s)';
		$like    = '%' . $wpdb->esc_like( $args['arama'] ) . '%';
		$bind[]  = $like;
		$bind[]  = $like;
		$bind[]  = $like;
	}
	if ( $grup === 'kapak_eksik' ) {
		$where[] = "p.durum = 'hata' AND (p.hata_mesaji LIKE %s OR ((i.medya_dosya_id IS NULL OR i.medya_dosya_id = 0) AND (i.medya_url IS NULL OR i.medya_url = '') AND (i.kapak_url IS NULL OR i.kapak_url = '')))";
		$bind[]  = '%Kapak yok%';
	}
	return array(
		'where' => implode( ' AND ', $where ),
		'bind'  => $bind,
	);
}

function tilfy_paylasim_say( $args = array() ) {
	global $wpdb;
	$filtre = tilfy_paylasim_liste_filtre_sql( $args );
	$sql    = 'SELECT COUNT(*) FROM ' . tilfy_tablo( 'paylasim' ) . ' p
		LEFT JOIN ' . tilfy_tablo( 'icerik' ) . ' i ON i.id = p.icerik_id
		WHERE ' . $filtre['where'];
	if ( $filtre['bind'] ) {
		return (int) $wpdb->get_var( $wpdb->prepare( $sql, $filtre['bind'] ) );
	}
	return (int) $wpdb->get_var( $sql );
}

function tilfy_paylasim_listele( $args = 100 ) {
	global $wpdb;
	if ( is_numeric( $args ) ) {
		$args = array( 'limit' => (int) $args );
	}
	$args = wp_parse_args(
		is_array( $args ) ? $args : array(),
		array(
			'limit'          => 0,
			'page'           => 1,
			'per_page'       => 100,
			'durum'          => '',
			'hedef_platform' => '',
			'gizle_yuklendi' => false,
			'arama'          => '',
			'grup'           => '',
		)
	);
	$per_page = max( 1, min( 100, (int) ( $args['per_page'] ?? 100 ) ) );
	$page     = max( 1, (int) ( $args['page'] ?? 1 ) );
	$limit    = (int) $args['limit'];
	if ( $limit > 0 ) {
		$per_page = max( 1, min( 200, $limit ) );
		$page     = 1;
	}
	$offset = ( $page - 1 ) * $per_page;
	$filtre = tilfy_paylasim_liste_filtre_sql( $args );
	$sql    = 'SELECT p.*, i.baslik, i.aciklama, i.kaynak_platform, i.kaynak_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 ' . $filtre['where'] . '
		ORDER BY p.guncelleme DESC LIMIT %d OFFSET %d';
	$bind   = array_merge( $filtre['bind'], array( $per_page, $offset ) );
	if ( $bind ) {
		return $wpdb->get_results( $wpdb->prepare( $sql, ...$bind ) );
	}
	return $wpdb->get_results( $wpdb->prepare( $sql, $per_page, $offset ) );
}

function tilfy_icerik_istatistik_al( $icerik_id ) {
	global $wpdb;
	return $wpdb->get_results(
		$wpdb->prepare(
			'SELECT * FROM ' . tilfy_tablo( 'istatistik' ) . ' WHERE icerik_id = %d ORDER BY son_sync DESC',
			(int) $icerik_id
		)
	);
}

function tilfy_capraz_dedupe_kilidi_al( $key ) {
	global $wpdb;
	$lock = 'tilfy_dedupe_' . md5( (string) $key );
	return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT GET_LOCK(%s, 3)', $lock ) ) === 1;
}

function tilfy_capraz_dedupe_kilidi_birak( $key ) {
	global $wpdb;
	$lock = 'tilfy_dedupe_' . md5( (string) $key );
	$wpdb->query( $wpdb->prepare( 'SELECT RELEASE_LOCK(%s)', $lock ) );
}

function tilfy_capraz_dedupe_key( $idler, $hedef, $ortak, $zorla ) {
	return 'tilfy_capraz_dedupe_' . md5( wp_json_encode( array( $idler, $hedef, $ortak, $zorla ) ) );
}

function tilfy_capraz_islem_yurut( $idler, $hedef, $ortak, $kaynak, $platform_ayarlar, $zorla = false, $kuyruk_tetik = true ) {
	if ( ! function_exists( 'tilfy_capraz_paylasim_baslat' ) ) {
		return new WP_Error( 'capraz_yok', 'Capraz paylasim modulu yok' );
	}
	$dedupe_key = tilfy_capraz_dedupe_key( $idler, $hedef, $ortak, $zorla );
	if ( ! tilfy_capraz_dedupe_kilidi_al( $dedupe_key ) ) {
		return new WP_Error( 'capraz_dedupe', 'Ayni istek zaten isleniyor, lutfen bekleyin', array( 'status' => 429 ) );
	}
	try {
		$ham_sayisi = count( $idler );
		$sirali_yol = function_exists( 'tilfy_capraz_yayilim_sirali_mi' ) && tilfy_capraz_yayilim_sirali_mi( $ortak, $ham_sayisi );
		$sonuc      = array(
			'adet'         => 0,
			'paylasim_ids' => array(),
			'uyarilar'     => array(),
			'engellenen'   => array(),
		);
		if ( ! $sirali_yol && $ham_sayisi > 25 ) {
			$sira_offset = 0;
			foreach ( array_chunk( $idler, 25 ) as $parca ) {
				$ortak_parca = $ortak;
				if ( $sira_offset > 0 ) {
					$ortak_parca['sira_baslangic'] = $sira_offset;
				}
				$parca_sonuc = tilfy_capraz_paylasim_baslat( $parca, $hedef, $ortak_parca, $kaynak, $platform_ayarlar, $zorla );
				$sonuc['adet']         += (int) ( $parca_sonuc['adet'] ?? 0 );
				$sonuc['paylasim_ids']  = array_merge( $sonuc['paylasim_ids'], (array) ( $parca_sonuc['paylasim_ids'] ?? array() ) );
				$sonuc['uyarilar']      = array_merge( $sonuc['uyarilar'], (array) ( $parca_sonuc['uyarilar'] ?? array() ) );
				$sonuc['engellenen']    = array_merge( $sonuc['engellenen'], (array) ( $parca_sonuc['engellenen'] ?? array() ) );
				$sira_offset           += count( $parca );
			}
		} else {
			$sonuc = tilfy_capraz_paylasim_baslat( $idler, $hedef, $ortak, $kaynak, $platform_ayarlar, $zorla );
		}
	} finally {
		tilfy_capraz_dedupe_kilidi_birak( $dedupe_key );
	}
	$pids = array_map( 'intval', (array) ( $sonuc['paylasim_ids'] ?? array() ) );
	$adet = (int) ( $sonuc['adet'] ?? 0 );
	if ( $adet <= 0 && ! empty( $pids ) ) {
		$adet = count( $pids );
	}
	$engellenen = (array) ( $sonuc['engellenen'] ?? array() );
	if ( $adet <= 0 && ! empty( $engellenen ) ) {
		return new WP_Error(
			'yinelenen_engellendi',
			'Yinelenen paylasim engellendi.',
			array(
				'engellenen' => $engellenen,
				'uyarilar'   => (array) ( $sonuc['uyarilar'] ?? array() ),
			)
		);
	}
	if ( $adet <= 0 ) {
		return new WP_Error( 'capraz_bos', 'Paylasim olusturulamadi' );
	}
	if ( $kuyruk_tetik && function_exists( 'tilfy_kuyruk_calistir' ) ) {
		tilfy_kuyruk_calistir();
	}
	$sonuc['adet'] = $adet;
	return $sonuc;
}

function tilfy_capraz_ortak_normalize( $ortak, $icerik_sayisi ) {
	$ortak          = is_array( $ortak ) ? $ortak : array();
	$icerik_sayisi  = (int) $icerik_sayisi;
	if ( $icerik_sayisi <= 1 ) {
		return $ortak;
	}
	$gunluk = max( 1, (int) ( $ortak['gunluk_adet'] ?? 1 ) );
	$arasi  = max( 0, (int) ( $ortak['paylasim_arasi_dakika'] ?? 0 ) );
	if ( function_exists( 'tilfy_zamanlama_yayilim_normalize' ) ) {
		$norm = tilfy_zamanlama_yayilim_normalize( $gunluk, $arasi );
		$ortak['gunluk_adet']           = $norm['gunluk_adet'];
		$ortak['paylasim_arasi_dakika'] = $norm['paylasim_arasi_dakika'];
	}
	if ( (int) ( $ortak['gunluk_adet'] ?? 1 ) > 1 && empty( $ortak['zamanlama'] ) && function_exists( 'tilfy_zamanlama_ts_to_input' ) ) {
		$ortak['zamanlama'] = tilfy_zamanlama_ts_to_input( (int) current_time( 'timestamp' ) + 60 );
	}
	return $ortak;
}

function tilfy_capraz_yayilim_sirali_mi( $ortak, $icerik_sayisi ) {
	$icerik_sayisi = (int) $icerik_sayisi;
	if ( $icerik_sayisi <= 1 ) {
		return false;
	}
	$ortak = function_exists( 'tilfy_capraz_ortak_normalize' )
		? tilfy_capraz_ortak_normalize( is_array( $ortak ) ? $ortak : array(), $icerik_sayisi )
		: ( is_array( $ortak ) ? $ortak : array() );
	$arasi  = max( 0, (int) ( $ortak['paylasim_arasi_dakika'] ?? 0 ) );
	$gunluk = max( 1, (int) ( $ortak['gunluk_adet'] ?? 1 ) );
	if ( ! empty( $ortak['zamanlama'] ) && function_exists( 'tilfy_zamanlama_yayilim_aktif_mi' ) ) {
		return ! tilfy_zamanlama_yayilim_aktif_mi( $gunluk, $arasi, $icerik_sayisi );
	}
	if ( $gunluk > 1 ) {
		return false;
	}
	if ( $arasi > 0 ) {
		return true;
	}
	return false;
}

function tilfy_capraz_paylasim_sirali_baslat( $icerik_idler, $hedef_platformlar, $ortak, $kaynak_platform, $platform_ayarlar, $zorla, $arka_plan ) {
	$ids = array();
	foreach ( tilfy_icerik_idlerden( $icerik_idler ) as $icerik ) {
		$ids[] = (int) $icerik->id;
	}
	$ids = array_values( array_filter( $ids ) );
	if ( empty( $ids ) ) {
		return array(
			'adet'         => 0,
			'paylasim_ids' => array(),
			'zamanlandi'   => false,
			'uyarilar'     => array(),
			'engellenen'   => array(),
		);
	}
	$arasi = max( 0, (int) ( $ortak['paylasim_arasi_dakika'] ?? 0 ) );
	$ek    = array(
		'mod'                   => 'capraz',
		'kaynak_platform'       => sanitize_key( (string) $kaynak_platform ),
		'hedef_platformlar'     => array_values( array_map( 'sanitize_key', (array) $hedef_platformlar ) ),
		'platform_ayar'         => is_array( $platform_ayarlar ) ? $platform_ayarlar : array(),
		'ortak'                 => is_array( $ortak ) ? $ortak : array(),
		'paylasim_arasi_dakika' => $arasi,
		'gunluk_adet'           => max( 1, (int) ( $ortak['gunluk_adet'] ?? 1 ) ),
		'zorla'                 => (bool) $zorla,
		'arka_plan'             => (bool) $arka_plan,
	);
	if ( ! empty( $ortak['zamanlama'] ) && function_exists( 'tilfy_zamanlama_baslangic_ts' ) ) {
		$bas = tilfy_zamanlama_baslangic_ts( $ortak['zamanlama'] );
		if ( $bas > 0 ) {
			$ek['baslangic_ts'] = $bas;
		}
	}
	global $wpdb;
	if ( function_exists( 'tilfy_veritabani_migrate' ) ) {
		tilfy_veritabani_migrate();
	}
	$simdi = current_time( 'mysql' );
	$wpdb->insert(
		tilfy_tablo( 'otomasyon_batch' ),
		array(
			'otomasyon_id'           => 0,
			'durum'                  => 'bekliyor',
			'tarama_zamani'          => $simdi,
			'icerik_ids'             => wp_json_encode( $ids ),
			'paylasim_ids'           => '[]',
			'baslatilan_sira'        => 0,
			'son_dalga_paylasim_ids' => '[]',
			'bekleme_bitis'          => null,
			'ek_veri'                => wp_json_encode( $ek ),
			'olusturulma'            => $simdi,
			'guncelleme'             => $simdi,
		)
	);
	$batch_id = (int) $wpdb->insert_id;
	if ( $batch_id <= 0 || ! function_exists( 'tilfy_otomasyon_batch_planla' ) ) {
		return array(
			'adet'         => 0,
			'paylasim_ids' => array(),
			'zamanlandi'   => false,
			'uyarilar'     => array(),
			'engellenen'   => array(),
		);
	}
	$sonuc = tilfy_otomasyon_batch_planla( null, $batch_id );
	$pids  = array_map( 'intval', (array) ( $sonuc['paylasim_ids'] ?? array() ) );
	$adet  = (int) ( $sonuc['adet'] ?? 0 );
	if ( $adet <= 0 && ! empty( $pids ) ) {
		$adet = count( $pids );
	}
	return array(
		'adet'         => $adet,
		'paylasim_ids' => $pids,
		'zamanlandi'   => ! empty( $sonuc['zamanlandi'] ),
		'uyarilar'     => array(),
		'engellenen'   => array(),
	);
}

function tilfy_capraz_paylasim_baslat( $icerik_idler, $hedef_platformlar, $ortak = array(), $kaynak_platform = '', $platform_ayarlar = array(), $zorla = false, $arka_plan = false ) {
	$ortak   = is_array( $ortak ) ? $ortak : array();
	$ham_ids = tilfy_icerik_idlerden( $icerik_idler );
	if ( function_exists( 'tilfy_capraz_ortak_normalize' ) ) {
		$ortak = tilfy_capraz_ortak_normalize( $ortak, count( $ham_ids ) );
	}
	if ( count( $ham_ids ) > 1 && ! array_key_exists( 'paylasim_arasi_dakika', $ortak ) ) {
		if ( ! empty( $ortak['zamanlama'] ) && function_exists( 'tilfy_capraz_sirali_arasi_varsayilan' ) ) {
			$ortak['paylasim_arasi_dakika'] = tilfy_capraz_sirali_arasi_varsayilan();
		} else {
			$ortak['paylasim_arasi_dakika'] = 0;
		}
	}
	if ( tilfy_capraz_yayilim_sirali_mi( $ortak, count( $ham_ids ) ) ) {
		return tilfy_capraz_paylasim_sirali_baslat( $icerik_idler, $hedef_platformlar, $ortak, $kaynak_platform, $platform_ayarlar, $zorla, $arka_plan );
	}
	$toplam          = 0;
	$paylasim_ids    = array();
	$uyarilar        = array();
	$engellenen      = array();
	$kaynak_platform = sanitize_key( $kaynak_platform );
	$platform_ayarlar = is_array( $platform_ayarlar ) ? $platform_ayarlar : array();
	$yayilim_aktif    = false;
	$gunluk_adet      = 1;
	$arasi_dakika     = 0;
	if ( function_exists( 'tilfy_zamanlama_yayilim_aktif_mi' ) ) {
		$gunluk_adet  = (int) ( $ortak['gunluk_adet'] ?? 1 );
		$arasi_dakika = (int) ( $ortak['paylasim_arasi_dakika'] ?? 0 );
		if ( $gunluk_adet > 1 && $arasi_dakika <= 0 ) {
			$arasi_dakika                   = 1;
			$ortak['paylasim_arasi_dakika'] = 1;
		}
		$yayilim_aktif = tilfy_zamanlama_yayilim_aktif_mi( $gunluk_adet, $arasi_dakika, count( $ham_ids ) )
			&& ! tilfy_capraz_yayilim_sirali_mi( $ortak, count( $ham_ids ) );
	}
	$sira = max( 0, (int) ( $ortak['sira_baslangic'] ?? 0 ) );
	foreach ( $ham_ids as $icerik ) {
		if ( sanitize_key( (string) ( $icerik->durum ?? '' ) ) === 'gizli' ) {
			continue;
		}
		if ( $kaynak_platform !== '' && $icerik->kaynak_platform !== $kaynak_platform ) {
			continue;
		}
		$hedefler = array_values(
			array_filter(
				(array) $hedef_platformlar,
				function ( $platform ) use ( $icerik ) {
					$platform = sanitize_key( $platform );
					if ( $platform === '' || $platform === sanitize_key( (string) $icerik->kaynak_platform ) ) {
						return false;
					}
					if ( function_exists( 'tilfy_platform_hedef_mi' ) && ! tilfy_platform_hedef_mi( $platform ) ) {
						return false;
					}
					return true;
				}
			)
		);
		if ( empty( $hedefler ) ) {
			continue;
		}
		$medya_engel = false;
		if ( function_exists( 'tilfy_icerik_paylasim_medya_eksik_mi' ) ) {
			foreach ( $hedefler as $hedef_platform ) {
				if ( tilfy_icerik_paylasim_medya_eksik_mi( $icerik, $hedef_platform ) ) {
					$medya_engel = true;
					break;
				}
			}
		}
		if ( $medya_engel ) {
			$uyarilar[] = '#' . (int) $icerik->id . ' medya/kapak eksik - paylasim atlandi';
			continue;
		}
		if ( function_exists( 'tilfy_kuyruk_ekle' ) && (int) $icerik->id > 0 ) {
			tilfy_kuyruk_ekle(
				'medya_indir',
				array( 'icerik_id' => (int) $icerik->id )
			);
		}
		$ozel = array();
		foreach ( $hedefler as $platform ) {
			$platform = sanitize_key( $platform );
			if ( empty( $platform_ayarlar[ $platform ] ) || ! is_array( $platform_ayarlar[ $platform ] ) ) {
				continue;
			}
			$ozel[ $platform ] = array( 'ayar' => $platform_ayarlar[ $platform ] );
		}
		$icerik_ortak = $ortak;
		if ( $yayilim_aktif && function_exists( 'tilfy_zamanlama_slot_datetime' ) ) {
			$icerik_ortak['zamanlama'] = tilfy_zamanlama_slot_datetime( $ortak['zamanlama'], $sira, $gunluk_adet, $arasi_dakika );
		}
		$eklenen = tilfy_paylasim_ekle( (int) $icerik->id, $hedefler, $icerik_ortak, $ozel, $zorla, $arka_plan );
		++$sira;
		$sonuc   = function_exists( 'tilfy_paylasim_ekle_sonuc' ) ? tilfy_paylasim_ekle_sonuc() : array();
		if ( ! empty( $sonuc['uyarilar'] ) ) {
			$uyarilar = array_merge( $uyarilar, (array) $sonuc['uyarilar'] );
		}
		if ( ! empty( $sonuc['engellenen'] ) ) {
			$engellenen = array_merge( $engellenen, (array) $sonuc['engellenen'] );
		}
		$paylasim_ids = array_merge( $paylasim_ids, array_map( 'intval', (array) $eklenen ) );
		$toplam += count( $eklenen );
	}
	$zamanlandi = false;
	if ( ! empty( $ortak['zamanlama'] ) && ! empty( $paylasim_ids ) ) {
		global $wpdb;
		$in = tilfy_sql_in_ints( $paylasim_ids );
		if ( $in ) {
			$zamanlandi = (int) $wpdb->get_var(
				$wpdb->prepare(
					'SELECT COUNT(*) FROM ' . tilfy_tablo( 'paylasim' ) . " WHERE id IN ({$in['yer']}) AND durum = 'zamanlandi'",
					$in['degerler']
				)
			) === count( $in['degerler'] );
		}
	}
	return array(
		'adet'         => $toplam,
		'paylasim_ids' => $paylasim_ids,
		'zamanlandi'   => $zamanlandi,
		'uyarilar'     => $uyarilar,
		'engellenen'   => $engellenen,
	);
}

function tilfy_istatistik_ozet() {
	global $wpdb;
	return array(
		'toplam_icerik' => (int) $wpdb->get_var( 'SELECT COUNT(*) FROM ' . tilfy_tablo( 'icerik' ) ),
		'bekleyen'      => (int) $wpdb->get_var( "SELECT COUNT(*) FROM " . tilfy_tablo( 'paylasim' ) . " WHERE durum IN ('beklemede','yukleniyor','zamanlandi','sirada')" ),
		'manuel'        => (int) $wpdb->get_var( "SELECT COUNT(*) FROM " . tilfy_tablo( 'paylasim' ) . " WHERE durum = 'manuel_bekliyor'" ),
		'yuklendi'      => (int) $wpdb->get_var( "SELECT COUNT(*) FROM " . tilfy_tablo( 'paylasim' ) . " WHERE durum = 'yuklendi'" ),
		'hata'          => (int) $wpdb->get_var( "SELECT COUNT(*) FROM " . tilfy_tablo( 'paylasim' ) . " WHERE durum = 'hata'" ),
	);
}

function tilfy_icerik_sifirla( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return array( 'ok' => false, 'mesaj' => 'Gecersiz icerik' );
	}
	$icerik = $wpdb->get_row(
		$wpdb->prepare( 'SELECT id, kaynak_platform FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', $icerik_id )
	);
	if ( ! $icerik ) {
		return array( 'ok' => false, 'mesaj' => 'Icerik bulunamadi' );
	}
	$paylasim_idler = array_map(
		'intval',
		(array) $wpdb->get_col(
			$wpdb->prepare( 'SELECT id FROM ' . tilfy_tablo( 'paylasim' ) . ' WHERE icerik_id = %d', $icerik_id )
		)
	);
	$kuyruk_silinen = 0;
	if ( function_exists( 'tilfy_kuyruk_icerik_isleri_sil' ) ) {
		$kuyruk_silinen = tilfy_kuyruk_icerik_isleri_sil( $icerik_id, $paylasim_idler );
	} elseif ( function_exists( 'tilfy_kuyruk_icerik_medya_indir_temizle' ) ) {
		$kuyruk_silinen = tilfy_kuyruk_icerik_medya_indir_temizle( $icerik_id );
	}
	$paylasim_silinen = 0;
	foreach ( $paylasim_idler as $pid ) {
		if ( function_exists( 'tilfy_kuyruk_paylasim_iptal' ) ) {
			tilfy_kuyruk_paylasim_iptal( $pid );
		}
		if ( function_exists( 'tilfy_paylasim_sil' ) ) {
			$paylasim_silinen += (int) tilfy_paylasim_sil( $pid );
		}
	}
	$medya_silinen = 0;
	if ( function_exists( 'tilfy_icerik_yerel_medya_zorla_sil' ) ) {
		$medya_silinen = tilfy_icerik_yerel_medya_zorla_sil( $icerik_id );
	} else {
		$wpdb->update(
			tilfy_tablo( 'icerik' ),
			array(
				'medya_dosya_id' => 0,
				'guncelleme'     => current_time( 'mysql' ),
			),
			array( 'id' => $icerik_id )
		);
	}
	if ( function_exists( 'tilfy_kuyruk_icerik_medya_basarisiz_sifirla' ) ) {
		tilfy_kuyruk_icerik_medya_basarisiz_sifirla( $icerik_id );
	}
	$otomasyon_t = tilfy_tablo( 'otomasyon_kayit' );
	if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $otomasyon_t ) ) === $otomasyon_t ) {
		$wpdb->delete( $otomasyon_t, array( 'icerik_id' => $icerik_id ) );
	}
	if ( function_exists( 'tilfy_otomasyon_batch_icerik_temizle' ) ) {
		tilfy_otomasyon_batch_icerik_temizle( $icerik_id );
	}
	$kaynak = sanitize_key( (string) $icerik->kaynak_platform );
	if ( $kaynak !== '' ) {
		$wpdb->query(
			$wpdb->prepare(
				'DELETE FROM ' . tilfy_tablo( 'istatistik' ) . ' WHERE icerik_id = %d AND platform <> %s',
				$icerik_id,
				$kaynak
			)
		);
	} else {
		$wpdb->delete( tilfy_tablo( 'istatistik' ), array( 'icerik_id' => $icerik_id ) );
	}
	if ( function_exists( 'tilfy_islem_log' ) ) {
		tilfy_islem_log(
			'yukleme',
			'Icerik sifirlandi',
			array(
				'icerik_id'        => $icerik_id,
				'paylasim_silinen' => $paylasim_silinen,
				'medya_silinen'    => $medya_silinen,
				'kuyruk_silinen'   => $kuyruk_silinen,
			)
		);
	}
	return array(
		'ok'               => true,
		'paylasim_silinen' => $paylasim_silinen,
		'medya_silinen'    => $medya_silinen,
		'kuyruk_silinen'   => $kuyruk_silinen,
	);
}

function tilfy_icerik_toplu_sifirla( $icerik_idler ) {
	$icerik_idler = array_values( array_unique( array_filter( array_map( 'intval', (array) $icerik_idler ) ) ) );
	$sonuc        = array(
		'adet'             => 0,
		'paylasim_silinen' => 0,
		'medya_silinen'    => 0,
		'kuyruk_silinen'   => 0,
		'hatalar'          => array(),
	);
	foreach ( $icerik_idler as $icerik_id ) {
		$tek = tilfy_icerik_sifirla( $icerik_id );
		if ( empty( $tek['ok'] ) ) {
			$sonuc['hatalar'][] = '#' . $icerik_id . ': ' . ( $tek['mesaj'] ?? 'Hata' );
			continue;
		}
		++$sonuc['adet'];
		$sonuc['paylasim_silinen'] += (int) ( $tek['paylasim_silinen'] ?? 0 );
		$sonuc['medya_silinen']    += (int) ( $tek['medya_silinen'] ?? 0 );
		$sonuc['kuyruk_silinen']   += (int) ( $tek['kuyruk_silinen'] ?? 0 );
	}
	return $sonuc;
}

function tilfy_icerik_sil( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return array( 'ok' => false, 'mesaj' => 'Gecersiz icerik' );
	}
	$icerik = $wpdb->get_row(
		$wpdb->prepare( 'SELECT id FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', $icerik_id )
	);
	if ( ! $icerik ) {
		return array( 'ok' => false, 'mesaj' => 'Icerik bulunamadi' );
	}
	$sifirla = tilfy_icerik_sifirla( $icerik_id );
	$kapak_silinen = 0;
	if ( function_exists( 'tilfy_icerik_kapak_zorla_sil' ) ) {
		$kapak_silinen = tilfy_icerik_kapak_zorla_sil( $icerik_id );
	}
	$wpdb->delete( tilfy_tablo( 'istatistik' ), array( 'icerik_id' => $icerik_id ) );
	$wpdb->delete( tilfy_tablo( 'paylasim' ), array( 'icerik_id' => $icerik_id ) );
	if ( function_exists( 'tilfy_kuyruk_icerik_medya_indir_temizle' ) ) {
		tilfy_kuyruk_icerik_medya_indir_temizle( $icerik_id );
	}
	$otomasyon_t = tilfy_tablo( 'otomasyon_kayit' );
	if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $otomasyon_t ) ) === $otomasyon_t ) {
		$wpdb->delete( $otomasyon_t, array( 'icerik_id' => $icerik_id ) );
	}
	if ( function_exists( 'tilfy_otomasyon_batch_icerik_temizle' ) ) {
		tilfy_otomasyon_batch_icerik_temizle( $icerik_id );
	}
	$silindi = (bool) $wpdb->delete( tilfy_tablo( 'icerik' ), array( 'id' => $icerik_id ) );
	if ( ! $silindi ) {
		return array( 'ok' => false, 'mesaj' => 'Icerik kaydi silinemedi' );
	}
	if ( function_exists( 'tilfy_islem_log' ) ) {
		tilfy_islem_log(
			'yukleme',
			'Icerik silindi',
			array(
				'icerik_id'        => $icerik_id,
				'paylasim_silinen' => (int) ( $sifirla['paylasim_silinen'] ?? 0 ),
				'medya_silinen'    => (int) ( $sifirla['medya_silinen'] ?? 0 ),
				'kuyruk_silinen'   => (int) ( $sifirla['kuyruk_silinen'] ?? 0 ),
				'kapak_silinen'    => $kapak_silinen,
			)
		);
	}
	return array(
		'ok'               => true,
		'paylasim_silinen' => (int) ( $sifirla['paylasim_silinen'] ?? 0 ),
		'medya_silinen'    => (int) ( $sifirla['medya_silinen'] ?? 0 ),
		'kuyruk_silinen'   => (int) ( $sifirla['kuyruk_silinen'] ?? 0 ),
		'kapak_silinen'    => $kapak_silinen,
	);
}

function tilfy_icerik_toplu_sil( $icerik_idler ) {
	$icerik_idler = array_values( array_unique( array_filter( array_map( 'intval', (array) $icerik_idler ) ) ) );
	$sonuc        = array(
		'adet'             => 0,
		'paylasim_silinen' => 0,
		'medya_silinen'    => 0,
		'kuyruk_silinen'   => 0,
		'kapak_silinen'    => 0,
		'hatalar'          => array(),
	);
	foreach ( $icerik_idler as $icerik_id ) {
		$tek = tilfy_icerik_sil( $icerik_id );
		if ( empty( $tek['ok'] ) ) {
			$sonuc['hatalar'][] = '#' . $icerik_id . ': ' . ( $tek['mesaj'] ?? 'Hata' );
			continue;
		}
		++$sonuc['adet'];
		$sonuc['paylasim_silinen'] += (int) ( $tek['paylasim_silinen'] ?? 0 );
		$sonuc['medya_silinen']    += (int) ( $tek['medya_silinen'] ?? 0 );
		$sonuc['kuyruk_silinen']   += (int) ( $tek['kuyruk_silinen'] ?? 0 );
		$sonuc['kapak_silinen']    += (int) ( $tek['kapak_silinen'] ?? 0 );
	}
	return $sonuc;
}
