<?php

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

function tilfy_kapak_sunucuya_kaydet_aktif_mi() {
	return tilfy_ayar_al( 'kapak_sunucuya_kaydet', '0' ) === '1';
}

function tilfy_kapak_islem_log( $mesaj, $icerik = null, $platform = '' ) {
	if ( ! function_exists( 'tilfy_islem_log' ) ) {
		return;
	}
	$ekstra = array();
	if ( is_object( $icerik ) ) {
		$ekstra['icerik_id'] = (int) ( $icerik->id ?? 0 );
		if ( $platform === '' ) {
			$platform = sanitize_key( (string) ( $icerik->kaynak_platform ?? '' ) );
		}
	} elseif ( is_numeric( $icerik ) ) {
		$ekstra['icerik_id'] = (int) $icerik;
	}
	if ( $platform !== '' ) {
		$ekstra['platform'] = sanitize_key( $platform );
	}
	tilfy_islem_log( 'kapak', $mesaj, $ekstra );
}

function tilfy_kapak_url_ozet( $url ) {
	$url = trim( (string) $url );
	if ( $url === '' ) {
		return '(bos)';
	}
	$host = (string) wp_parse_url( $url, PHP_URL_HOST );
	$path = (string) wp_parse_url( $url, PHP_URL_PATH );
	if ( $host !== '' && $path !== '' ) {
		return $host . wp_html_excerpt( $path, 56, '…' );
	}
	return wp_html_excerpt( $url, 80, '…' );
}

function tilfy_kapak_url_video_mi( $url ) {
	$url = strtolower( (string) $url );
	if ( $url === '' ) {
		return false;
	}
	if ( preg_match( '/\.(mp4|mov|webm|m4v)(\?|$)/', $url ) ) {
		return true;
	}
	if ( strpos( $url, 'mime_type=video' ) !== false || strpos( $url, 'mime_type%3dvideo' ) !== false ) {
		return true;
	}
	return false;
}

function tilfy_icerik_kapak_platform_yenile( $icerik ) {
	global $wpdb;
	if ( ! $icerik ) {
		return $icerik;
	}
	$platform  = sanitize_key( (string) ( $icerik->kaynak_platform ?? '' ) );
	$kaynak_id = sanitize_text_field( (string) ( $icerik->kaynak_id ?? '' ) );
	$icerik_id = (int) ( $icerik->id ?? 0 );
	if ( $kaynak_id === '' || $icerik_id <= 0 ) {
		return $icerik;
	}
	if ( function_exists( 'tilfy_api_dosyalari_yukle' ) ) {
		tilfy_api_dosyalari_yukle();
	}
	if ( $platform === 'instagram' && function_exists( 'tilfy_meta_graph_istek' ) && function_exists( 'tilfy_meta_yayin_jetonu_al' ) ) {
		$jeton = tilfy_meta_yayin_jetonu_al();
		if ( is_wp_error( $jeton ) || $jeton === '' ) {
			$mesaj = is_wp_error( $jeton ) ? $jeton->get_error_message() : 'eksik';
			tilfy_kapak_islem_log( 'IG kapak yenile jeton: ' . $mesaj, $icerik );
			return $icerik;
		}
		$veri = tilfy_meta_graph_istek(
			$kaynak_id,
			array( 'fields' => 'thumbnail_url,media_url,media_type' ),
			'GET',
			null,
			$jeton
		);
		if ( is_wp_error( $veri ) ) {
			tilfy_kapak_islem_log( 'IG kapak yenile API: ' . $veri->get_error_message(), $icerik );
			return $icerik;
		}
		$media_type = sanitize_key( (string) ( $veri['media_type'] ?? '' ) );
		$thumb      = trim( (string) ( $veri['thumbnail_url'] ?? '' ) );
		if ( $thumb === '' && $media_type === 'IMAGE' ) {
			$thumb = trim( (string) ( $veri['media_url'] ?? '' ) );
		}
		if ( $thumb === '' || tilfy_kapak_url_video_mi( $thumb ) ) {
			tilfy_kapak_islem_log( 'IG kapak yenile: gorsel URL yok tip=' . $media_type, $icerik );
			return $icerik;
		}
		$wpdb->update(
			tilfy_tablo( 'icerik' ),
			array(
				'kapak_url'  => esc_url_raw( $thumb ),
				'guncelleme' => current_time( 'mysql' ),
			),
			array( 'id' => $icerik_id )
		);
		tilfy_kapak_islem_log( 'IG kapak yenilendi url=' . tilfy_kapak_url_ozet( $thumb ), $icerik );
		return $wpdb->get_row(
			$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', $icerik_id )
		);
	}
	if ( $platform === 'facebook' && function_exists( 'tilfy_meta_graph_sayfa_istek' ) ) {
		$veri = tilfy_meta_graph_sayfa_istek(
			$kaynak_id,
			array( 'fields' => 'picture,source,attachments{media{image{src}}}' )
		);
		if ( is_wp_error( $veri ) ) {
			tilfy_kapak_islem_log( 'FB kapak yenile API: ' . $veri->get_error_message(), $icerik );
			return $icerik;
		}
		$thumb = trim( (string) ( $veri['picture'] ?? '' ) );
		if ( $thumb === '' ) {
			$ek = $veri['attachments']['data'][0] ?? array();
			$thumb = trim( (string) ( $ek['media']['image']['src'] ?? '' ) );
		}
		if ( $thumb === '' || tilfy_kapak_url_video_mi( $thumb ) ) {
			tilfy_kapak_islem_log( 'FB kapak yenile: gorsel URL yok', $icerik );
			return $icerik;
		}
		$wpdb->update(
			tilfy_tablo( 'icerik' ),
			array(
				'kapak_url'  => esc_url_raw( $thumb ),
				'guncelleme' => current_time( 'mysql' ),
			),
			array( 'id' => $icerik_id )
		);
		tilfy_kapak_islem_log( 'FB kapak yenilendi url=' . tilfy_kapak_url_ozet( $thumb ), $icerik );
		return $wpdb->get_row(
			$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', $icerik_id )
		);
	}
	return $icerik;
}

function tilfy_senkron_medya_modu() {
	$mod = sanitize_key( (string) tilfy_ayar_al( 'senkron_medya', 'both' ) );
	return in_array( $mod, array( 'both', 'video', 'image' ), true ) ? $mod : 'both';
}

function tilfy_senkron_medya_uygun_mu( $medya_tipi ) {
	$mod  = tilfy_senkron_medya_modu();
	$grup = function_exists( 'tilfy_icerik_medya_grup' ) ? tilfy_icerik_medya_grup( $medya_tipi ) : 'video';
	if ( $mod === 'both' ) {
		return true;
	}
	if ( $mod === 'video' ) {
		return $grup === 'video';
	}
	return $grup === 'gorsel';
}

function tilfy_icerik_kapak_url_al( $icerik ) {
	if ( ! $icerik ) {
		return '';
	}
	if ( (int) ( $icerik->kapak_dosya_id ?? 0 ) > 0 ) {
		$url = wp_get_attachment_url( (int) $icerik->kapak_dosya_id );
		if ( is_string( $url ) && $url !== '' ) {
			return esc_url_raw( $url );
		}
	}
	$kapak = trim( (string) ( $icerik->kapak_url ?? '' ) );
	if ( $kapak !== '' ) {
		return esc_url_raw( $kapak );
	}
	$medya = trim( (string) ( $icerik->medya_url ?? '' ) );
	if ( $medya !== '' && preg_match( '/\.(jpe?g|png|gif|webp)(\?|$)/i', $medya ) ) {
		return esc_url_raw( $medya );
	}
	if ( (int) ( $icerik->medya_dosya_id ?? 0 ) > 0 ) {
		$thumb = wp_get_attachment_image_url( (int) $icerik->medya_dosya_id, 'thumbnail' );
		if ( is_string( $thumb ) && $thumb !== '' ) {
			return esc_url_raw( $thumb );
		}
	}
	return '';
}

function tilfy_icerik_kapak_eksik_mi( $icerik ) {
	if ( ! $icerik ) {
		return false;
	}
	if ( (int) ( $icerik->kapak_dosya_id ?? 0 ) > 0 ) {
		$yol = get_attached_file( (int) $icerik->kapak_dosya_id );
		if ( $yol && is_file( $yol ) ) {
			return false;
		}
	}
	$kapak = trim( (string) ( $icerik->kapak_url ?? '' ) );
	if ( $kapak === '' ) {
		return true;
	}
	if ( tilfy_kapak_sunucuya_kaydet_aktif_mi() && tilfy_kapak_uzaktan_url_mi( $kapak ) ) {
		return true;
	}
	return false;
}

function tilfy_kapak_uzaktan_url_mi( $url ) {
	$url = strtolower( (string) $url );
	if ( $url === '' ) {
		return false;
	}
	$uzak = array( 'cdninstagram.com', 'fbcdn.net', 'scontent-', 'instagram.com' );
	foreach ( $uzak as $parca ) {
		if ( strpos( $url, $parca ) !== false ) {
			return true;
		}
	}
	return false;
}

function tilfy_icerik_kapak_kaynak_url_al( $icerik ) {
	if ( ! $icerik ) {
		return '';
	}
	$platform  = sanitize_key( (string) ( $icerik->kaynak_platform ?? '' ) );
	$kaynak_id = sanitize_text_field( (string) ( $icerik->kaynak_id ?? '' ) );
	$sunucu    = tilfy_kapak_sunucuya_kaydet_aktif_mi();

	if ( $sunucu && $kaynak_id !== '' && in_array( $platform, array( 'instagram', 'facebook' ), true ) ) {
		$icerik = tilfy_icerik_kapak_platform_yenile( $icerik );
	}

	$kapak = trim( (string) ( $icerik->kapak_url ?? '' ) );
	if ( $kapak !== '' && ! tilfy_kapak_yerel_url_mi( $kapak ) ) {
		if ( ! $sunucu || ! tilfy_kapak_url_video_mi( $kapak ) ) {
			return esc_url_raw( $kapak );
		}
		tilfy_kapak_islem_log( 'Kapak URL video dosyasi gibi, atlandi', $icerik );
	}

	if ( $kaynak_id === '' ) {
		return '';
	}
	if ( function_exists( 'tilfy_api_dosyalari_yukle' ) ) {
		tilfy_api_dosyalari_yukle();
	}
	if ( $platform === 'instagram' && function_exists( 'tilfy_meta_instagram_medya_url_yenile' ) ) {
		$yenilenen = tilfy_meta_instagram_medya_url_yenile( $icerik );
		if ( is_string( $yenilenen ) && $yenilenen !== '' ) {
			global $wpdb;
			$icerik = $wpdb->get_row(
				$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', (int) $icerik->id )
			);
		}
	} elseif ( $platform === 'facebook' && function_exists( 'tilfy_meta_facebook_medya_url_yenile' ) ) {
		tilfy_meta_facebook_medya_url_yenile( $icerik );
		global $wpdb;
		$icerik = $wpdb->get_row(
			$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', (int) $icerik->id )
		);
	}
	if ( $icerik ) {
		$kapak = trim( (string) ( $icerik->kapak_url ?? '' ) );
		if ( $kapak !== '' && ! tilfy_kapak_yerel_url_mi( $kapak ) && ! tilfy_kapak_url_video_mi( $kapak ) ) {
			return esc_url_raw( $kapak );
		}
	}
	if ( $platform === 'youtube' && $kaynak_id !== '' ) {
		if ( function_exists( 'tilfy_youtube_video_kapak_url_al' ) ) {
			$yt = tilfy_youtube_video_kapak_url_al( $kaynak_id );
			if ( $yt !== '' ) {
				return esc_url_raw( $yt );
			}
		}
		return esc_url_raw( 'https://i.ytimg.com/vi/' . rawurlencode( $kaynak_id ) . '/hqdefault.jpg' );
	}
	return '';
}

function tilfy_kapak_yerel_url_mi( $url ) {
	$url = (string) $url;
	if ( $url === '' ) {
		return false;
	}
	$depo_url = untrailingslashit( tilfy_medya_depo_url() );
	if ( $depo_url !== '' && strpos( $url, $depo_url ) === 0 ) {
		return true;
	}
	$upload = tilfy_wp_upload_dir_ham();
	if ( ! empty( $upload['baseurl'] ) && strpos( $url, $upload['baseurl'] ) !== false && strpos( $url, 'tilfy-medya' ) !== false ) {
		return true;
	}
	return false;
}

function tilfy_kapak_gorsel_mime_bul( $body ) {
	$body = (string) $body;
	if ( strlen( $body ) < 12 ) {
		return '';
	}
	if ( substr( $body, 0, 2 ) === "\xFF\xD8" ) {
		return 'image/jpeg';
	}
	if ( substr( $body, 0, 4 ) === "\x89PNG" ) {
		return 'image/png';
	}
	if ( substr( $body, 0, 4 ) === 'RIFF' && substr( $body, 8, 4 ) === 'WEBP' ) {
		return 'image/webp';
	}
	if ( substr( $body, 4, 4 ) === 'ftyp' ) {
		return 'video/mp4';
	}
	return '';
}

function tilfy_kapak_http_tmp_indir( $url, $icerik_id ) {
	$GLOBALS['tilfy_medya_indiriyor'] = true;
	add_filter( 'http_request_args', 'tilfy_cdn_indirme_istek_args', 10, 2 );
	$yanit = wp_remote_get(
		$url,
		array(
			'timeout'     => 12,
			'redirection' => 0,
			'headers'     => array(
				'Referer' => 'https://www.instagram.com/',
				'Accept'  => 'image/*,*/*;q=0.8',
			),
		)
	);
	remove_filter( 'http_request_args', 'tilfy_cdn_indirme_istek_args', 10 );
	unset( $GLOBALS['tilfy_medya_indiriyor'] );

	if ( is_wp_error( $yanit ) ) {
		tilfy_kapak_islem_log( 'HTTP hata: ' . $yanit->get_error_message(), $icerik_id );
		return $yanit;
	}
	$kod   = (int) wp_remote_retrieve_response_code( $yanit );
	$govde = (string) wp_remote_retrieve_body( $yanit );
	$tip   = strtolower( trim( (string) wp_remote_retrieve_header( $yanit, 'content-type' ) ) );
	$boyut = strlen( $govde );
	tilfy_kapak_islem_log( 'HTTP yanit kod=' . $kod . ' boyut=' . $boyut . ' tip=' . ( $tip !== '' ? $tip : '?' ), $icerik_id );

	if ( $kod < 200 || $kod >= 300 ) {
		return new WP_Error( 'tilfy_kapak', 'HTTP ' . $kod );
	}
	if ( $boyut < 64 ) {
		return new WP_Error( 'tilfy_kapak', 'Kapak verisi cok kucuk' );
	}
	if ( $boyut > 4 * 1024 * 1024 ) {
		return new WP_Error( 'tilfy_kapak', 'Kapak cok buyuk (' . $boyut . ' bayt)' );
	}
	$mime = tilfy_kapak_gorsel_mime_bul( $govde );
	if ( $mime === 'video/mp4' || ( $tip !== '' && strpos( $tip, 'video/' ) === 0 ) ) {
		return new WP_Error( 'tilfy_kapak', 'Yanit video, kapak degil' );
	}
	if ( $mime === '' && $tip !== '' && strpos( $tip, 'image/' ) !== 0 ) {
		return new WP_Error( 'tilfy_kapak', 'Gorsel MIME degil: ' . $tip );
	}
	if ( $mime === '' ) {
		$mime = 'image/jpeg';
	}

	$tmp = wp_tempnam( 'tilfy-kapak-' . (int) $icerik_id );
	if ( ! $tmp ) {
		return new WP_Error( 'tilfy_kapak', 'Gecici dosya olusturulamadi' );
	}
	$yazildi = file_put_contents( $tmp, $govde );
	if ( ! $yazildi ) {
		@unlink( $tmp );
		return new WP_Error( 'tilfy_kapak', 'Gecici dosyaya yazilamadi' );
	}
	return array(
		'tmp'  => $tmp,
		'mime' => $mime,
	);
}

function tilfy_kapak_attachment_ekle( $hedef_yol, $bagil, $mime, $icerik_id ) {
	$icerik_id = (int) $icerik_id;
	$bagil     = (string) $bagil;
	$mime      = (string) $mime;
	if ( $bagil === '' && function_exists( 'tilfy_medya_bagil_dosya_yolu' ) ) {
		$bagil = tilfy_medya_bagil_dosya_yolu( $hedef_yol );
	}
	$upload = tilfy_wp_upload_dir_ham();
	$url    = trailingslashit( $upload['baseurl'] ) . str_replace( '\\', '/', ltrim( $bagil, '/' ) );
	$suspend = wp_suspend_cache_invalidation( true );
	$ek_id   = wp_insert_post(
		array(
			'post_type'      => 'attachment',
			'post_mime_type' => $mime,
			'post_title'     => 'Tilfy kapak ' . $icerik_id,
			'post_content'   => '',
			'post_status'    => 'inherit',
			'guid'           => esc_url_raw( $url ),
		),
		true
	);
	wp_suspend_cache_invalidation( $suspend );
	if ( is_wp_error( $ek_id ) || ! $ek_id ) {
		return is_wp_error( $ek_id ) ? $ek_id : new WP_Error( 'tilfy_kapak', 'Attachment eklenemedi' );
	}
	update_post_meta( (int) $ek_id, '_wp_attached_file', $bagil );
	return (int) $ek_id;
}

function tilfy_kapak_tara_kilit_al() {
	$kilit = get_transient( 'tilfy_kapak_tara_kilit' );
	if ( $kilit ) {
		$yas = time() - (int) $kilit;
		if ( $yas < 45 ) {
			return false;
		}
		delete_transient( 'tilfy_kapak_tara_kilit' );
	}
	set_transient( 'tilfy_kapak_tara_kilit', (string) time(), 120 );
	return true;
}

function tilfy_kapak_tara_kilit_yenile() {
	set_transient( 'tilfy_kapak_tara_kilit', (string) time(), 120 );
}

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

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

function tilfy_kapak_loopback_imza_olustur( $exp, $adim ) {
	$exp  = (int) $exp;
	$adim = (int) $adim;
	return hash_hmac( 'sha256', $exp . '|' . $adim, tilfy_kapak_loopback_token_al() );
}

function tilfy_kapak_loopback_nonce_dogrula() {
	if ( function_exists( 'tilfy_yerel_loopback_izinli' ) && ! tilfy_yerel_loopback_izinli() ) {
		return new WP_Error( 'tilfy_kapak_loopback', 'forbidden' );
	}
	$exp  = isset( $_REQUEST['exp'] ) ? absint( wp_unslash( $_REQUEST['exp'] ) ) : 0;
	$adim = isset( $_REQUEST['adim'] ) ? absint( wp_unslash( $_REQUEST['adim'] ) ) : 10;
	$adim = max( 1, min( 12, $adim ) );
	$sig  = isset( $_REQUEST['sig'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['sig'] ) ) : '';
	if ( $sig === '' && isset( $_REQUEST['_tilfy_nonce'] ) ) {
		$sig = sanitize_text_field( wp_unslash( $_REQUEST['_tilfy_nonce'] ) );
	}
	$simdi = time();
	if ( $exp < $simdi || $exp > ( $simdi + 300 ) || $sig === '' ) {
		return new WP_Error( 'tilfy_kapak_loopback', 'expired' );
	}
	$beklenen = tilfy_kapak_loopback_imza_olustur( $exp, $adim );
	if ( ! hash_equals( $beklenen, $sig ) ) {
		return new WP_Error( 'tilfy_kapak_loopback', 'bad_nonce' );
	}
	return array(
		'exp'  => $exp,
		'adim' => $adim,
	);
}

function tilfy_kapak_tara_loopback_tetik() {
	if ( tilfy_kapak_tara_bekleyen_say() <= 0 ) {
		return;
	}
	$bekliyor = get_transient( 'tilfy_kapak_loopback_bekliyor' );
	if ( $bekliyor && ( time() - (int) $bekliyor ) < 45 ) {
		return;
	}
	set_transient( 'tilfy_kapak_loopback_bekliyor', (string) time(), 120 );
	$adim  = 10;
	$exp   = time() + 120;
	$sig   = tilfy_kapak_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_kapak_tara_loopback',
				'exp'          => $exp,
				'adim'         => $adim,
				'sig'          => $sig,
				'_tilfy_nonce' => $sig,
			),
		)
	);
	tilfy_kapak_islem_log(
		'Loopback tetiklendi bekleyen=' . tilfy_kapak_tara_bekleyen_say(),
		null,
		'instagram'
	);
}

function tilfy_kapak_tara_loopback_islem() {
	$dogrula = tilfy_kapak_loopback_nonce_dogrula();
	if ( is_wp_error( $dogrula ) ) {
		status_header( 403 );
		wp_die( '403', '', array( 'response' => 403 ) );
	}
	$adim = (int) $dogrula['adim'];
	@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();
	}
	tilfy_kapak_tara_takili_co();
	$islenen = tilfy_kuyruk_kapak_tara_calistir( $adim, false );
	if ( $islenen <= 0 ) {
		tilfy_kapak_tara_takili_co();
		tilfy_kapak_tara_kilit_birak();
		sleep( 2 );
		$islenen = tilfy_kuyruk_kapak_tara_calistir( $adim, false );
	}
	$bekleyen = tilfy_kapak_tara_bekleyen_say();
	if ( $bekleyen > 0 && $islenen > 0 ) {
		tilfy_kapak_tara_loopback_tetik();
	} elseif ( $bekleyen > 0 ) {
		tilfy_kapak_islem_log( 'Loopback ilerleme yok takili_co bekleyen=' . $bekleyen, null, 'instagram' );
		tilfy_kapak_tara_tick_zamanla( 45 );
	} else {
		delete_transient( 'tilfy_kapak_loopback_bekliyor' );
		tilfy_kapak_islem_log( 'Loopback tamamlandi', null, 'instagram' );
	}
	wp_die( 'ok' );
}

function tilfy_kapak_tara_kilit_birak() {
	delete_transient( 'tilfy_kapak_tara_kilit' );
}

function tilfy_kapak_tara_tick_zamanla( $saniye = 12 ) {
	$saniye = max( 8, min( 60, (int) $saniye ) );
	if ( ! wp_next_scheduled( 'tilfy_kapak_tara_tick' ) ) {
		wp_schedule_single_event( time() + $saniye, 'tilfy_kapak_tara_tick' );
	}
	if ( function_exists( 'spawn_cron' ) ) {
		spawn_cron( true );
	}
}

function tilfy_kapak_tara_bekleyen_say() {
	global $wpdb;
	return (int) $wpdb->get_var(
		"SELECT COUNT(*) FROM " . tilfy_tablo( 'kuyruk' ) . " WHERE islem = 'kapak_tara' AND durum IN ('beklemede','calisiyor')"
	);
}

function tilfy_kapak_tara_tick_calistir() {
	if ( tilfy_kapak_tara_bekleyen_say() <= 0 ) {
		return;
	}
	tilfy_kapak_tara_loopback_tetik();
}

function tilfy_kuyruk_kapak_tara_calistir( $adim = 6, $devam_tetikle = true ) {
	global $wpdb;
	if ( ! function_exists( 'tilfy_kuyruk_isle_satir' ) ) {
		return 0;
	}
	if ( ! tilfy_kapak_tara_kilit_al() ) {
		if ( $devam_tetikle ) {
			tilfy_kapak_tara_tick_zamanla( 30 );
		}
		return -1;
	}
	if ( function_exists( 'tilfy_kuyruk_kapak_takili_serbest_birak' ) ) {
		tilfy_kuyruk_kapak_takili_serbest_birak( 45 );
	}
	$adim    = max( 1, min( 20, (int) $adim ) );
	$islenen = 0;
	for ( $i = 0; $i < $adim; $i++ ) {
		$is = $wpdb->get_row(
			"SELECT * FROM " . tilfy_tablo( 'kuyruk' ) . " WHERE durum = 'beklemede' AND islem = 'kapak_tara' ORDER BY id ASC LIMIT 1"
		);
		if ( ! $is ) {
			break;
		}
		tilfy_kuyruk_isle_satir( $is );
		++$islenen;
		tilfy_kapak_tara_kilit_yenile();
	}
	tilfy_kapak_tara_kilit_birak();
	if ( $devam_tetikle && $islenen > 0 && tilfy_kapak_tara_bekleyen_say() > 0 ) {
		tilfy_kapak_tara_loopback_tetik();
	}
	return $islenen;
}

function tilfy_kapak_dosyasi_kaydet( $url, $icerik_id ) {
	@ignore_user_abort( true );
	$icerik_id = (int) $icerik_id;
	$url       = esc_url_raw( (string) $url );
	if ( $icerik_id <= 0 || $url === '' || ! tilfy_url_izinli_mi( $url ) ) {
		$neden = $icerik_id <= 0 ? 'icerik_id gecersiz' : ( $url === '' ? 'url bos' : 'url izinli degil' );
		tilfy_kapak_islem_log( 'Indirme iptal: ' . $neden . ' url=' . tilfy_kapak_url_ozet( $url ), $icerik_id );
		return new WP_Error( 'tilfy_kapak', 'Kapak URL gecersiz' );
	}
	if ( tilfy_kapak_url_video_mi( $url ) ) {
		tilfy_kapak_islem_log( 'Indirme iptal: URL video dosyasi gibi', $icerik_id );
		return new WP_Error( 'tilfy_kapak', 'Kapak URL gorsel degil' );
	}

	tilfy_kapak_islem_log( 'Indirme basladi url=' . tilfy_kapak_url_ozet( $url ), $icerik_id );

	$indir = tilfy_kapak_http_tmp_indir( $url, $icerik_id );
	if ( is_wp_error( $indir ) ) {
		return $indir;
	}

	$tmp  = (string) ( $indir['tmp'] ?? '' );
	$mime = (string) ( $indir['mime'] ?? 'image/jpeg' );
	if ( $tmp === '' || ! is_file( $tmp ) ) {
		return new WP_Error( 'tilfy_kapak', 'Gecici kapak dosyasi yok' );
	}

	$uzanti_map = array(
		'image/jpeg' => '.jpg',
		'image/png'  => '.png',
		'image/webp' => '.webp',
	);
	$uzanti    = $uzanti_map[ $mime ] ?? tilfy_uzanti_tahmin( $url );
	$dosya_adi = 'tilfy-kapak-' . $icerik_id . '-' . wp_generate_password( 6, false ) . $uzanti;
	tilfy_kapak_islem_log( 'Disk yaziliyor dosya=' . $dosya_adi, $icerik_id );
	$kayit     = function_exists( 'tilfy_medya_dosya_klasore_kaydet' )
		? tilfy_medya_dosya_klasore_kaydet( $tmp, $dosya_adi, 'thumbnail' )
		: new WP_Error( 'tilfy_kapak', 'Medya depo modulu yok' );
	@unlink( $tmp );

	if ( is_wp_error( $kayit ) ) {
		tilfy_kapak_islem_log( 'Disk yazma hata: ' . $kayit->get_error_message(), $icerik_id );
		return $kayit;
	}

	$hedef_yol = (string) ( $kayit['file'] ?? '' );
	$bagil     = (string) ( $kayit['bagil'] ?? '' );
	if ( $hedef_yol === '' || ! is_file( $hedef_yol ) ) {
		tilfy_kapak_islem_log( 'Disk dogrulama basarisiz hedef=' . $hedef_yol, $icerik_id );
		return new WP_Error( 'tilfy_kapak', 'Kapak dosyasi diskte yok' );
	}

	tilfy_kapak_islem_log( 'Disk kayit tamam hedef=' . $hedef_yol, $icerik_id );

	$ek_id = tilfy_kapak_attachment_ekle( $hedef_yol, $bagil, $mime, $icerik_id );

	if ( is_wp_error( $ek_id ) || ! $ek_id ) {
		$mesaj = is_wp_error( $ek_id ) ? $ek_id->get_error_message() : 'bilinmiyor';
		tilfy_kapak_islem_log( 'Ek dosya olusturulamadi hedef=' . $hedef_yol . ' hata=' . $mesaj, $icerik_id );
		return new WP_Error( 'tilfy_kapak', 'Kapak eklenemedi' );
	}

	update_post_meta( $ek_id, '_tilfy_kapak_icerik_id', $icerik_id );
	update_post_meta( $ek_id, '_tilfy_kapak_kalici', '1' );

	$boyut = (int) ( $kayit['size'] ?? 0 );
	tilfy_kapak_islem_log(
		'Indirme tamam dosya_id=' . (int) $ek_id . ' boyut=' . $boyut . ' disk=' . $hedef_yol . ' bagil=' . $bagil,
		$icerik_id
	);

	return (int) $ek_id;
}

function tilfy_icerik_kapak_dosyasi_bagla( $icerik_id, $kapak_dosya_id, $kapak_url = '' ) {
	global $wpdb;
	$icerik_id      = (int) $icerik_id;
	$kapak_dosya_id = (int) $kapak_dosya_id;
	if ( $icerik_id <= 0 || $kapak_dosya_id <= 0 ) {
		return false;
	}
	$eski = (int) $wpdb->get_var(
		$wpdb->prepare( 'SELECT kapak_dosya_id FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', $icerik_id )
	);
	if ( $eski > 0 && $eski !== $kapak_dosya_id ) {
		$eski_kalici = get_post_meta( $eski, '_tilfy_kapak_kalici', true );
		if ( $eski_kalici === '1' ) {
			wp_delete_attachment( $eski, true );
		}
	}
	if ( $kapak_url === '' ) {
		$kapak_url = (string) wp_get_attachment_url( $kapak_dosya_id );
	}
	$wpdb->update(
		tilfy_tablo( 'icerik' ),
		array(
			'kapak_dosya_id' => $kapak_dosya_id,
			'kapak_url'      => esc_url_raw( $kapak_url ),
			'guncelleme'     => current_time( 'mysql' ),
		),
		array( 'id' => $icerik_id )
	);
	return true;
}

function tilfy_icerik_kapak_hazirla( $icerik ) {
	global $wpdb;
	if ( is_numeric( $icerik ) ) {
		$icerik = $wpdb->get_row(
			$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', (int) $icerik )
		);
	}
	if ( ! $icerik ) {
		return array( 'ok' => false, 'mesaj' => 'Icerik yok' );
	}
	$icerik_id = (int) $icerik->id;
	$eksik     = tilfy_icerik_kapak_eksik_mi( $icerik );
	$sunucu    = tilfy_kapak_sunucuya_kaydet_aktif_mi();
	tilfy_kapak_islem_log(
		'Hazirla basladi eksik=' . ( $eksik ? '1' : '0' ) . ' sunucu_kaydet=' . ( $sunucu ? '1' : '0' )
		. ' kapak_url=' . tilfy_kapak_url_ozet( (string) ( $icerik->kapak_url ?? '' ) )
		. ' kapak_dosya_id=' . (int) ( $icerik->kapak_dosya_id ?? 0 )
		. ' medya_tipi=' . sanitize_key( (string) ( $icerik->medya_tipi ?? '' ) ),
		$icerik
	);
	if ( ! $eksik && ! $sunucu ) {
		tilfy_kapak_islem_log( 'Atlandi: kapak mevcut, sunucu kaydi kapali', $icerik );
		return array( 'ok' => true, 'mesaj' => 'Kapak mevcut', 'atlandi' => true );
	}
	if ( (int) ( $icerik->kapak_dosya_id ?? 0 ) > 0 ) {
		$yol = get_attached_file( (int) $icerik->kapak_dosya_id );
		if ( $yol && is_file( $yol ) ) {
			tilfy_kapak_islem_log( 'Atlandi: yerel kapak dosyasi mevcut #' . (int) $icerik->kapak_dosya_id, $icerik );
			return array( 'ok' => true, 'mesaj' => 'Yerel kapak mevcut', 'atlandi' => true );
		}
		tilfy_kapak_islem_log( 'kapak_dosya_id var ama dosya yok, yeniden denenecek #' . (int) $icerik->kapak_dosya_id, $icerik );
	}
	if ( (int) ( $icerik->medya_dosya_id ?? 0 ) > 0 ) {
		$mime = get_post_mime_type( (int) $icerik->medya_dosya_id );
		if ( is_string( $mime ) && strpos( $mime, 'image/' ) === 0 ) {
			tilfy_icerik_kapak_dosyasi_bagla( $icerik_id, (int) $icerik->medya_dosya_id );
			tilfy_kapak_islem_log( 'Gorsel medya kapak olarak baglandi medya_dosya_id=' . (int) $icerik->medya_dosya_id, $icerik );
			return array( 'ok' => true, 'mesaj' => 'Gorsel medya kapak olarak baglandi' );
		}
	}
	if ( ! $sunucu ) {
		$kaynak = tilfy_icerik_kapak_kaynak_url_al( $icerik );
		if ( $kaynak !== '' ) {
			$wpdb->update(
				tilfy_tablo( 'icerik' ),
				array(
					'kapak_url'  => esc_url_raw( $kaynak ),
					'guncelleme' => current_time( 'mysql' ),
				),
				array( 'id' => $icerik_id )
			);
			tilfy_kapak_islem_log( 'Uzak kapak URL guncellendi url=' . tilfy_kapak_url_ozet( $kaynak ), $icerik );
			return array( 'ok' => true, 'mesaj' => 'Uzak kapak URL guncellendi' );
		}
		tilfy_kapak_islem_log( 'Hata: kapak kaynagi bulunamadi (sunucu kaydi kapali)', $icerik );
		return array( 'ok' => false, 'mesaj' => 'Kapak kaynagi bulunamadi' );
	}
	$kaynak = tilfy_icerik_kapak_kaynak_url_al( $icerik );
	if ( $kaynak === '' ) {
		tilfy_kapak_islem_log( 'Hata: kapak kaynagi bulunamadi kaynak_id=' . sanitize_text_field( (string) ( $icerik->kaynak_id ?? '' ) ), $icerik );
		return array( 'ok' => false, 'mesaj' => 'Kapak kaynagi bulunamadi' );
	}
	tilfy_kapak_islem_log( 'Kaynak URL bulundu url=' . tilfy_kapak_url_ozet( $kaynak ), $icerik );
	$dosya_id = tilfy_kapak_dosyasi_kaydet( $kaynak, $icerik_id );
	if ( is_wp_error( $dosya_id ) ) {
		tilfy_kapak_islem_log( 'Hata: ' . $dosya_id->get_error_message(), $icerik );
		return array( 'ok' => false, 'mesaj' => $dosya_id->get_error_message() );
	}
	tilfy_icerik_kapak_dosyasi_bagla( $icerik_id, (int) $dosya_id );
	global $wpdb;
	$dogrula = (int) $wpdb->get_var(
		$wpdb->prepare( 'SELECT kapak_dosya_id FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', $icerik_id )
	);
	tilfy_kapak_islem_log( 'Kapak sunucuya kaydedildi dosya_id=' . (int) $dosya_id . ' db_kapak_dosya_id=' . $dogrula, $icerik );
	return array( 'ok' => true, 'mesaj' => 'Kapak sunucuya kaydedildi' );
}

function tilfy_icerik_kapak_sunucuya_kaydet_dene( $icerik_id ) {
	if ( ! tilfy_kapak_sunucuya_kaydet_aktif_mi() ) {
		return;
	}
	global $wpdb;
	$icerik = $wpdb->get_row(
		$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', (int) $icerik_id )
	);
	if ( ! $icerik || ! tilfy_icerik_kapak_eksik_mi( $icerik ) ) {
		return;
	}
	tilfy_icerik_kapak_hazirla( $icerik );
}

function tilfy_kapak_tara_platform_dogrula( $platform ) {
	$platform = sanitize_key( (string) $platform );
	$izinli   = array( 'instagram', 'facebook', 'youtube', 'threads' );
	return in_array( $platform, $izinli, true ) ? $platform : '';
}

function tilfy_kapak_tara_aday_where( $platform = '' ) {
	$platform = tilfy_kapak_tara_platform_dogrula( $platform );
	if ( tilfy_kapak_sunucuya_kaydet_aktif_mi() ) {
		$sql = "durum <> 'gizli' AND kapak_dosya_id = 0 AND kapak_url NOT LIKE 'tilfy://%'";
	} else {
		$sql = "durum <> 'gizli' AND (kapak_url = '' OR kapak_dosya_id = 0) AND kapak_url NOT LIKE 'tilfy://%'";
	}
	$degerler = array();
	if ( $platform !== '' ) {
		$sql       .= ' AND kaynak_platform = %s';
		$degerler[] = $platform;
	}
	return array(
		'sql'      => $sql,
		'degerler' => $degerler,
		'platform' => $platform,
	);
}

function tilfy_kapak_tara_aday_say( $platform = '' ) {
	global $wpdb;
	$filtre = tilfy_kapak_tara_aday_where( $platform );
	$sql    = 'SELECT COUNT(*) FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE ' . $filtre['sql'];
	if ( ! empty( $filtre['degerler'] ) ) {
		return (int) $wpdb->get_var( $wpdb->prepare( $sql, $filtre['degerler'] ) );
	}
	return (int) $wpdb->get_var( $sql );
}

function tilfy_kapak_tara_aday_sayilar() {
	$sayilar = array(
		'' => tilfy_kapak_tara_aday_say( '' ),
	);
	foreach ( array( 'instagram', 'facebook', 'youtube', 'threads' ) as $platform ) {
		$sayilar[ $platform ] = tilfy_kapak_tara_aday_say( $platform );
	}
	return $sayilar;
}

function tilfy_kapak_tara_adaylar( $limit = 8, $son_id = 0, $platform = '' ) {
	global $wpdb;
	$limit  = max( 1, min( 20, (int) $limit ) );
	$son_id = max( 0, (int) $son_id );
	$filtre = tilfy_kapak_tara_aday_where( $platform );
	$sql    = 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE ' . $filtre['sql'] . ' AND id > %d ORDER BY id ASC LIMIT %d';
	$args   = array_merge( $filtre['degerler'], array( $son_id, $limit ) );
	return $wpdb->get_results( $wpdb->prepare( $sql, $args ) );
}

function tilfy_kuyruk_kapak_tara( $payload ) {
	@set_time_limit( 180 );
	@ignore_user_abort( true );
	$platform = tilfy_kapak_tara_platform_dogrula( (string) ( $payload['platform'] ?? '' ) );
	$son_id   = max( 0, (int) ( $payload['son_id'] ?? 0 ) );
	$limit    = 1;
	$toplam   = tilfy_kapak_tara_aday_say( $platform );
	$adaylar  = tilfy_kapak_tara_adaylar( $limit, $son_id, $platform );
	$platform_etiket = $platform !== '' && function_exists( 'tilfy_platform_etiket' ) ? tilfy_platform_etiket( $platform ) : 'Tum kaynaklar';
	tilfy_kapak_islem_log(
		'Tarama is basladi platform=' . ( $platform !== '' ? $platform : 'tumu' )
		. ' kalan=' . $toplam . ' son_id>' . $son_id,
		null,
		$platform
	);
	if ( empty( $adaylar ) ) {
		if ( $son_id > 0 && $toplam > 0 && function_exists( 'tilfy_kuyruk_ekle' ) ) {
			tilfy_kapak_islem_log( 'Ust ID bitti, basa donuluyor kalan=' . $toplam, null, $platform );
			tilfy_kuyruk_ekle(
				'kapak_tara',
				array(
					'son_id'   => 0,
					'platform' => $platform,
				)
			);
			if ( function_exists( 'tilfy_kapak_tara_loopback_tetik' ) ) {
				tilfy_kapak_tara_loopback_tetik();
			}
			return array( 'ok' => true, 'mesaj' => 'Kapak taramasi devam (basa alindi)', 'bitti' => false );
		}
		tilfy_kapak_islem_log( 'Tarama tamamlandi (aday kalmadi) platform=' . ( $platform !== '' ? $platform : 'tumu' ), null, $platform );
		return array( 'ok' => true, 'mesaj' => 'Kapak taramasi tamamlandi', 'bitti' => true );
	}
	$icerik         = $adaylar[0];
	$icerik_id      = (int) $icerik->id;
	$son_islenen_id = $icerik_id;
	$sonuc          = tilfy_icerik_kapak_hazirla( $icerik );
	$basarili       = 0;
	$hata           = 0;
	$atlandi        = 0;
	if ( ! empty( $sonuc['ok'] ) && empty( $sonuc['atlandi'] ) ) {
		$basarili = 1;
	} elseif ( ! empty( $sonuc['atlandi'] ) ) {
		$atlandi = 1;
	} else {
		$hata = 1;
		tilfy_kapak_islem_log( 'Sonuc hata: ' . ( $sonuc['mesaj'] ?? '?' ), $icerik );
		global $wpdb;
		$wpdb->update(
			tilfy_tablo( 'icerik' ),
			array(
				'kapak_url'  => 'tilfy://kapak-atlandi',
				'guncelleme' => current_time( 'mysql' ),
			),
			array( 'id' => $icerik_id )
		);
	}
	$kalan = tilfy_kapak_tara_aday_say( $platform );
	tilfy_kapak_islem_log(
		'Tarama is bitti icerik#' . $icerik_id
		. ' indirilen=' . $basarili . ' atlandi=' . $atlandi . ' hata=' . $hata . ' kalan=' . $kalan,
		null,
		$platform
	);
	$devam       = false;
	$next_son_id = 0;
	if ( $kalan > 0 && function_exists( 'tilfy_kuyruk_ekle' ) ) {
		$devam       = true;
		$next_son_id = $son_islenen_id;
		$sonraki     = tilfy_kapak_tara_adaylar( 1, $next_son_id, $platform );
		if ( empty( $sonraki ) ) {
			$next_son_id = 0;
			tilfy_kapak_islem_log( 'Sonraki aday yok, basa donuluyor kalan=' . $kalan, null, $platform );
		}
	}
	if ( $devam ) {
		tilfy_kuyruk_ekle(
			'kapak_tara',
			array(
				'son_id'   => $next_son_id,
				'platform' => $platform,
			)
		);
		tilfy_kapak_islem_log( 'Sonraki is kuyruga eklendi son_id=' . $next_son_id, null, $platform );
	} else {
		tilfy_kapak_islem_log( 'Tarama tamamlandi kalan=' . $kalan, null, $platform );
	}
	return array(
		'ok'       => true,
		'mesaj'    => $platform_etiket . ' · #' . $icerik_id . ': ' . $basarili . ' kapak, ' . $atlandi . ' atlandi, ' . $hata . ' hata, kalan ' . $kalan,
		'basarili' => $basarili,
		'hata'     => $hata,
		'atlandi'  => $atlandi,
		'kalan'    => $kalan,
	);
}

function tilfy_kapak_tara_baslat( $platform = '' ) {
	if ( ! function_exists( 'tilfy_kuyruk_ekle' ) ) {
		return array( 'ok' => false, 'mesaj' => 'Kuyruk modulu yok' );
	}
	@set_time_limit( 120 );
	@ignore_user_abort( true );
	$platform = tilfy_kapak_tara_platform_dogrula( $platform );
	global $wpdb;
	if ( function_exists( 'tilfy_kuyruk_duraklat_set' ) ) {
		tilfy_kuyruk_duraklat_set( false );
	}
	$wpdb->query(
		"DELETE FROM " . tilfy_tablo( 'kuyruk' ) . " WHERE islem = 'kapak_tara'"
	);
	tilfy_kuyruk_ekle(
		'kapak_tara',
		array(
			'son_id'   => 0,
			'platform' => $platform,
		)
	);
	$adet            = tilfy_kapak_tara_aday_say( $platform );
	$platform_etiket = $platform !== '' && function_exists( 'tilfy_platform_etiket' ) ? tilfy_platform_etiket( $platform ) : 'Tum kaynaklar';
	tilfy_kapak_islem_log(
		'Tarama baslatildi aday=' . $adet . ' sunucu_kaydet=' . ( tilfy_kapak_sunucuya_kaydet_aktif_mi() ? '1' : '0' ),
		null,
		$platform
	);
	$islenen = tilfy_kuyruk_kapak_tara_calistir( 2, false );
	tilfy_kapak_tara_loopback_tetik();
	$bekleyen = tilfy_kapak_tara_bekleyen_say();
	return array(
		'ok'       => true,
		'mesaj'    => $platform_etiket . ': kapak taramasi basladi (' . $adet . ' aday, ' . $islenen . ' is islendi, kuyruk ' . $bekleyen . ')',
		'adet'     => $adet,
		'islenen'  => $islenen,
		'bekleyen' => $bekleyen,
		'platform' => $platform,
	);
}
