<?php

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

function tilfy_medya_boyut_format( $bytes ) {
	$bytes = (int) $bytes;
	if ( $bytes >= 1073741824 ) {
		return number_format( $bytes / 1073741824, 2 ) . ' GB';
	}
	if ( $bytes >= 1048576 ) {
		return number_format( $bytes / 1048576, 2 ) . ' MB';
	}
	if ( $bytes >= 1024 ) {
		return number_format( $bytes / 1024, 1 ) . ' KB';
	}
	return $bytes . ' B';
}

function tilfy_medya_disk_uzantisi_gecerli( $dosya_adi ) {
	return (bool) preg_match( '/\.(mp4|mov|jpg|jpeg|png|webp)$/i', (string) $dosya_adi );
}

function tilfy_medya_tilfy_dosya_adi_mi( $dosya_adi ) {
	return (bool) preg_match( '/^tilfy-\d+-/i', (string) $dosya_adi );
}

function tilfy_medya_attachment_dosya_yolu( $attachment_id ) {
	$attachment_id = (int) $attachment_id;
	if ( $attachment_id <= 0 ) {
		return '';
	}
	$yol = get_attached_file( $attachment_id );
	if ( $yol && is_file( $yol ) ) {
		return wp_normalize_path( $yol );
	}
	$meta = (string) get_post_meta( $attachment_id, '_wp_attached_file', true );
	if ( $meta === '' ) {
		return '';
	}
	$upload  = tilfy_wp_upload_dir_ham();
	$basedir = tilfy_medya_uploads_kok();
	$adaylar = array(
		wp_normalize_path( $basedir . '/' . ltrim( $meta, '/' ) ),
		wp_normalize_path( $meta ),
	);
	foreach ( array_unique( $adaylar ) as $aday ) {
		if ( is_file( $aday ) ) {
			return $aday;
		}
	}
	return '';
}

function tilfy_medya_tilfy_attachment_ids() {
	global $wpdb;
	$like_dosya  = $wpdb->esc_like( 'tilfy-' ) . '%';
	$like_baslik = 'Tilfy %';
	return array_map(
		'intval',
		(array) $wpdb->get_col(
			$wpdb->prepare(
				"SELECT DISTINCT p.ID
				FROM {$wpdb->posts} p
				LEFT JOIN {$wpdb->postmeta} pm_file ON pm_file.post_id = p.ID AND pm_file.meta_key = '_wp_attached_file'
				LEFT JOIN {$wpdb->postmeta} pm_tmp ON pm_tmp.post_id = p.ID AND pm_tmp.meta_key = '_tilfy_gecici_medya'
				WHERE p.post_type = 'attachment'
				AND p.post_status IN ('inherit','private')
				AND (
					p.post_title LIKE %s
					OR pm_file.meta_value LIKE %s
					OR pm_tmp.meta_value = '1'
				)",
				$like_baslik,
				$like_dosya
			)
		)
	);
}

function tilfy_medya_uploads_disk_tilfy_tara() {
	$basedir = tilfy_medya_uploads_kok();
	$cikti   = array();
	if ( ! is_dir( $basedir ) ) {
		return $cikti;
	}
	$kok_dosyalar = glob( trailingslashit( $basedir ) . 'tilfy-*' );
	if ( is_array( $kok_dosyalar ) ) {
		foreach ( $kok_dosyalar as $dosya ) {
			if ( is_file( $dosya ) && tilfy_medya_disk_uzantisi_gecerli( basename( $dosya ) ) ) {
				$cikti[] = wp_normalize_path( $dosya );
			}
		}
	}
	$yil = (int) gmdate( 'Y' );
	for ( $y = $yil; $y >= $yil - 4; $y-- ) {
		for ( $m = 1; $m <= 12; $m++ ) {
			$klasor = $basedir . '/' . $y . '/' . sprintf( '%02d', $m );
			if ( ! is_dir( $klasor ) ) {
				continue;
			}
			$dosyalar = glob( trailingslashit( $klasor ) . 'tilfy-*' );
			if ( ! is_array( $dosyalar ) ) {
				continue;
			}
			foreach ( $dosyalar as $dosya ) {
				if ( is_file( $dosya ) && tilfy_medya_disk_uzantisi_gecerli( basename( $dosya ) ) ) {
					$cikti[] = wp_normalize_path( $dosya );
				}
			}
		}
	}
	return array_values( array_unique( $cikti ) );
}

function tilfy_medya_depo_dosya_url( $dosya_yolu ) {
	$dosya_yolu = wp_normalize_path( (string) $dosya_yolu );
	$basedir    = tilfy_medya_uploads_kok();
	if ( strpos( $dosya_yolu, $basedir ) === 0 ) {
		$upload = tilfy_wp_upload_dir_ham();
		$rel    = ltrim( substr( $dosya_yolu, strlen( $basedir ) ), '/' );
		return trailingslashit( $upload['baseurl'] ) . $rel;
	}
	foreach ( tilfy_medya_depo_tarama_kokleri() as $kok ) {
		if ( strpos( $dosya_yolu, $kok ) !== 0 ) {
			continue;
		}
		$rel = ltrim( substr( $dosya_yolu, strlen( $kok ) ), '/' );
		$aktif = wp_normalize_path( untrailingslashit( tilfy_medya_depo_dizini() ) );
		if ( $kok === $aktif ) {
			return trailingslashit( tilfy_medya_depo_url() ) . $rel;
		}
		$upload = tilfy_wp_upload_dir_ham();
		$varsayilan = wp_normalize_path( untrailingslashit( trailingslashit( $upload['basedir'] ) . 'tilfy-medya' ) );
		if ( $kok === $varsayilan ) {
			return trailingslashit( $upload['baseurl'] ) . 'tilfy-medya/' . $rel;
		}
		$uploads_kok = tilfy_medya_uploads_kok();
		if ( $uploads_kok !== '' && strpos( $kok, $uploads_kok ) === 0 ) {
			$rel_kok = ltrim( substr( $kok, strlen( $uploads_kok ) ), '/' );
			return trailingslashit( tilfy_medya_uploads_kok_url() ) . ( $rel_kok !== '' ? $rel_kok . '/' : '' ) . $rel;
		}
	}
	return '';
}

function tilfy_medya_depo_yolu_gecerli_mi( $dosya_yolu ) {
	$dosya_yolu = wp_normalize_path( (string) $dosya_yolu );
	if ( $dosya_yolu === '' || strpos( $dosya_yolu, '..' ) !== false || ! is_file( $dosya_yolu ) ) {
		return false;
	}
	$gercek = realpath( $dosya_yolu );
	if ( ! is_string( $gercek ) || $gercek === '' ) {
		return false;
	}
	$gercek = wp_normalize_path( $gercek );
	foreach ( tilfy_medya_depo_tarama_kokleri() as $kok ) {
		$kok_r = realpath( $kok );
		if ( ! is_string( $kok_r ) || $kok_r === '' ) {
			continue;
		}
		$kok_r = wp_normalize_path( $kok_r );
		if ( $gercek === $kok_r || strpos( $gercek, trailingslashit( $kok_r ) ) === 0 ) {
			return true;
		}
	}
	$basedir = realpath( tilfy_medya_uploads_kok() );
	if ( is_string( $basedir ) && $basedir !== '' ) {
		$basedir = wp_normalize_path( $basedir );
		if (
			( $gercek === $basedir || strpos( $gercek, trailingslashit( $basedir ) ) === 0 )
			&& tilfy_medya_tilfy_dosya_adi_mi( basename( $gercek ) )
		) {
			return true;
		}
	}
	return false;
}

function tilfy_medya_attachment_id_dosya_yolu( $abs_path ) {
	global $wpdb;
	$abs_path = wp_normalize_path( (string) $abs_path );
	if ( ! is_file( $abs_path ) ) {
		return 0;
	}
	$basename = basename( $abs_path );
	$upload   = tilfy_wp_upload_dir_ham();
	$basedir  = wp_normalize_path( $upload['basedir'] );
	$adaylar  = array( $abs_path, $basename );
	if ( strpos( $abs_path, $basedir ) === 0 ) {
		$adaylar[] = ltrim( substr( $abs_path, strlen( $basedir ) ), '/' );
	}
	$adaylar = array_values( array_unique( array_filter( $adaylar ) ) );
	foreach ( $adaylar as $aday ) {
		$id = (int) $wpdb->get_var(
			$wpdb->prepare(
				"SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_wp_attached_file' AND meta_value = %s LIMIT 1",
				$aday
			)
		);
		if ( $id > 0 ) {
			return $id;
		}
	}
	return (int) $wpdb->get_var(
		$wpdb->prepare(
			"SELECT post_id FROM {$wpdb->postmeta} pm
			INNER JOIN {$wpdb->posts} p ON p.ID = pm.post_id AND p.post_type = 'attachment'
			WHERE pm.meta_key = '_wp_attached_file' AND pm.meta_value LIKE %s
			ORDER BY p.ID DESC LIMIT 1",
			'%' . $wpdb->esc_like( $basename )
		)
	);
}

function tilfy_medya_icerik_bul( $attachment_id, $dosya_adi ) {
	global $wpdb;
	$it = tilfy_tablo( 'icerik' );
	$attachment_id = (int) $attachment_id;
	if ( $attachment_id > 0 ) {
		$icerik = $wpdb->get_row(
			$wpdb->prepare( "SELECT * FROM {$it} WHERE medya_dosya_id = %d ORDER BY id DESC LIMIT 1", $attachment_id )
		);
		if ( $icerik ) {
			return $icerik;
		}
	}
	if ( preg_match( '/^tilfy-(\d+)-/', (string) $dosya_adi, $m ) ) {
		return $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$it} WHERE id = %d", (int) $m[1] ) );
	}
	return null;
}

function tilfy_icerik_yerel_medya_bul( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return 0;
	}
	$onek = 'tilfy-' . $icerik_id . '-';
	$like = $wpdb->esc_like( $onek ) . '%';
	$ids  = array_map(
		'intval',
		(array) $wpdb->get_col(
			$wpdb->prepare(
				"SELECT p.ID FROM {$wpdb->posts} p
				INNER JOIN {$wpdb->postmeta} pm ON pm.post_id = p.ID AND pm.meta_key = '_wp_attached_file'
				WHERE p.post_type = 'attachment'
				AND p.post_status IN ('inherit','private')
				AND pm.meta_value LIKE %s
				ORDER BY p.ID DESC",
				$like
			)
		)
	);
	if ( empty( $ids ) && function_exists( 'tilfy_medya_uploads_disk_tilfy_tara' ) ) {
		$en_iyi  = 0;
		$en_buyuk = 0;
		foreach ( tilfy_medya_uploads_disk_tilfy_tara() as $yol ) {
			if ( strpos( basename( $yol ), $onek ) !== 0 ) {
				continue;
			}
			$aid = function_exists( 'tilfy_medya_attachment_id_dosya_yolu' ) ? tilfy_medya_attachment_id_dosya_yolu( $yol ) : 0;
			if ( $aid <= 0 ) {
				continue;
			}
			$boyut = (int) @filesize( $yol );
			if ( $boyut >= $en_buyuk ) {
				$en_buyuk = $boyut;
				$en_iyi   = $aid;
			}
		}
		return $en_iyi;
	}
	$en_iyi   = 0;
	$en_buyuk = 0;
	foreach ( $ids as $aid ) {
		$yol = function_exists( 'tilfy_medya_attachment_dosya_yolu' ) ? tilfy_medya_attachment_dosya_yolu( $aid ) : get_attached_file( $aid );
		if ( ! $yol || ! is_file( $yol ) ) {
			continue;
		}
		$boyut = (int) @filesize( $yol );
		if ( $boyut >= $en_buyuk ) {
			$en_buyuk = $boyut;
			$en_iyi   = $aid;
		}
	}
	return $en_iyi;
}

function tilfy_kuyruk_icerik_medya_indir_temizle( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return 0;
	}
	$kt      = tilfy_tablo( 'kuyruk' );
	$satirlar = $wpdb->get_results(
		"SELECT id, payload FROM {$kt} WHERE islem = 'medya_indir' AND durum IN ('beklemede','calisiyor')"
	);
	$silinen = 0;
	foreach ( (array) $satirlar as $satir ) {
		$payload = json_decode( (string) $satir->payload, true );
		if ( ! is_array( $payload ) || (int) ( $payload['icerik_id'] ?? 0 ) !== $icerik_id ) {
			continue;
		}
		$wpdb->delete( $kt, array( 'id' => (int) $satir->id ) );
		++$silinen;
	}
	return $silinen;
}

function tilfy_kuyruk_icerik_isleri_sil( $icerik_id, $paylasim_idler = array() ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return 0;
	}
	$paylasim_idler = array_values( array_unique( array_filter( array_map( 'intval', (array) $paylasim_idler ) ) ) );
	$kt             = tilfy_tablo( 'kuyruk' );
	$silinen        = 0;
	$satirlar       = $wpdb->get_results(
		"SELECT id, islem, payload FROM {$kt} WHERE islem IN ('medya_indir','paylasim_gonder','youtube_sonrasi')"
	);
	foreach ( (array) $satirlar as $satir ) {
		$payload = json_decode( (string) $satir->payload, true );
		if ( ! is_array( $payload ) ) {
			continue;
		}
		$eslesme = false;
		if ( (string) $satir->islem === 'medya_indir' && (int) ( $payload['icerik_id'] ?? 0 ) === $icerik_id ) {
			$eslesme = true;
		} elseif ( in_array( (string) $satir->islem, array( 'paylasim_gonder', 'youtube_sonrasi' ), true ) ) {
			$pid = (int) ( $payload['paylasim_id'] ?? 0 );
			$iid = (int) ( $payload['icerik_id'] ?? 0 );
			if ( ( $pid > 0 && in_array( $pid, $paylasim_idler, true ) ) || $iid === $icerik_id ) {
				$eslesme = true;
			}
		}
		if ( ! $eslesme ) {
			continue;
		}
		$wpdb->delete( $kt, array( 'id' => (int) $satir->id ) );
		++$silinen;
	}
	return $silinen;
}

function tilfy_icerik_yerel_medya_bagla( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return false;
	}
	$icerik = $wpdb->get_row(
		$wpdb->prepare( 'SELECT id, medya_dosya_id FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE id = %d', $icerik_id )
	);
	if ( ! $icerik || (int) $icerik->medya_dosya_id > 0 ) {
		return false;
	}
	$dosya_id = tilfy_icerik_yerel_medya_bul( $icerik_id );
	if ( $dosya_id <= 0 || ! wp_get_attachment_url( $dosya_id ) ) {
		return false;
	}
	$wpdb->update(
		tilfy_tablo( 'icerik' ),
		array(
			'medya_dosya_id' => $dosya_id,
			'guncelleme'     => current_time( 'mysql' ),
		),
		array( 'id' => $icerik_id )
	);
	tilfy_kuyruk_icerik_medya_indir_temizle( $icerik_id );
	if ( function_exists( 'tilfy_islem_log' ) ) {
		tilfy_islem_log( 'indirme', 'Yerel medya baglandi #' . $dosya_id, array( 'icerik_id' => $icerik_id ) );
	}
	return true;
}

function tilfy_icerik_yerel_medya_hazir_toplu_bagla( $limit = 30 ) {
	global $wpdb;
	$limit = max( 1, min( 80, (int) $limit ) );
	$it    = tilfy_tablo( 'icerik' );
	$pt    = tilfy_tablo( 'paylasim' );
	$ids   = $wpdb->get_col(
		$wpdb->prepare(
			"SELECT DISTINCT i.id
			FROM {$it} i
			INNER JOIN {$pt} p ON p.icerik_id = i.id
			WHERE (i.medya_dosya_id IS NULL OR i.medya_dosya_id = 0)
			AND i.medya_url IS NOT NULL AND i.medya_url <> ''
			AND p.durum IN ('beklemede','yukleniyor','zamanlandi')
			ORDER BY i.id ASC
			LIMIT %d",
			$limit
		)
	);
	$baglanan = 0;
	foreach ( array_map( 'intval', (array) $ids ) as $icerik_id ) {
		if ( tilfy_icerik_yerel_medya_bagla( $icerik_id ) ) {
			++$baglanan;
		}
	}
	return $baglanan;
}

function tilfy_medya_icerik_silme_engeli( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return '';
	}
	if ( function_exists( 'tilfy_kuyruk_icerik_medya_bekliyor_mu' ) && tilfy_kuyruk_icerik_medya_bekliyor_mu( $icerik_id ) ) {
		return tilfy__( 'Medya indirme kuyruğunda' );
	}
	$bekleyen = (int) $wpdb->get_var(
		$wpdb->prepare(
			"SELECT COUNT(*) FROM " . tilfy_tablo( 'paylasim' ) . " WHERE icerik_id = %d AND durum IN ('beklemede','yukleniyor','zamanlandi')",
			$icerik_id
		)
	);
	if ( $bekleyen > 0 ) {
		return tilfy__( 'Bekleyen veya zamanlanmış paylaşım var' );
	}
	$kuyruk_paylasim = $wpdb->get_results(
		"SELECT payload FROM " . tilfy_tablo( 'kuyruk' ) . " WHERE islem = 'paylasim_gonder' AND durum IN ('beklemede','calisiyor')"
	);
	foreach ( (array) $kuyruk_paylasim as $is ) {
		$payload = json_decode( (string) $is->payload, true );
		if ( is_array( $payload ) && (int) ( $payload['icerik_id'] ?? 0 ) === $icerik_id ) {
			return tilfy__( 'Kuyrukta aktif paylaşım var' );
		}
	}
	return '';
}

function tilfy_medya_silme_engeli( $attachment_id, $icerik = null ) {
	$attachment_id = (int) $attachment_id;
	if ( $attachment_id > 0 && function_exists( 'tilfy_medya_silinemez_mi' ) && tilfy_medya_silinemez_mi( $attachment_id ) ) {
		if ( ! $icerik ) {
			global $wpdb;
			$icerik = $wpdb->get_row(
				$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE medya_dosya_id = %d LIMIT 1', $attachment_id )
			);
		}
		if ( $icerik ) {
			$engel = tilfy_medya_icerik_silme_engeli( (int) $icerik->id );
			if ( $engel !== '' ) {
				return $engel;
			}
		}
		return tilfy__( 'Kuyrukta aktif işlem var' );
	}
	if ( $icerik ) {
		return tilfy_medya_icerik_silme_engeli( (int) $icerik->id );
	}
	return '';
}

function tilfy_medya_icerik_paylasimlari( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return array();
	}
	$durum_etiket = array(
		'beklemede'       => tilfy__( 'Beklemede' ),
		'yukleniyor'      => tilfy__( 'Yükleniyor' ),
		'yuklendi'        => tilfy__( 'Yüklendi' ),
		'hata'            => tilfy__( 'Hata' ),
		'manuel_bekliyor' => tilfy__( 'Manuel' ),
		'zamanlandi'      => tilfy__( 'Zamanlandı' ),
	);
	$rows = $wpdb->get_results(
		$wpdb->prepare(
			'SELECT id, hedef_platform, durum, hedef_url, hata_mesaji, zamanlama FROM ' . tilfy_tablo( 'paylasim' ) . ' WHERE icerik_id = %d ORDER BY id DESC',
			$icerik_id
		)
	);
	$cikti = array();
	foreach ( (array) $rows as $satir ) {
		$durum = sanitize_key( (string) $satir->durum );
		$cikti[] = array(
			'id'              => (int) $satir->id,
			'platform'        => sanitize_key( (string) $satir->hedef_platform ),
			'platform_etiket' => function_exists( 'tilfy_platform_etiket' ) ? tilfy_platform_etiket( $satir->hedef_platform ) : $satir->hedef_platform,
			'durum'           => $durum,
			'durum_etiket'    => $durum_etiket[ $durum ] ?? $durum,
			'hedef_url'       => esc_url_raw( (string) $satir->hedef_url ),
			'hata_mesaji'     => sanitize_text_field( (string) ( $satir->hata_mesaji ?? '' ) ),
			'zamanlama'       => sanitize_text_field( (string) ( $satir->zamanlama ?? '' ) ),
		);
	}
	return $cikti;
}

function tilfy_medya_depo_satir_olustur( $dosya_yolu, $icerik = null, $attachment_id = 0 ) {
	$dosya_yolu = wp_normalize_path( (string) $dosya_yolu );
	if ( ! tilfy_medya_depo_yolu_gecerli_mi( $dosya_yolu ) ) {
		return null;
	}
	$dosya_adi = basename( $dosya_yolu );
	$attachment_id = (int) $attachment_id;
	if ( $attachment_id <= 0 ) {
		$attachment_id = tilfy_medya_attachment_id_dosya_yolu( $dosya_yolu );
	}
	if ( ! $icerik ) {
		$icerik = tilfy_medya_icerik_bul( $attachment_id, $dosya_adi );
	}
	$boyut = (int) filesize( $dosya_yolu );
	$mime  = '';
	$url   = '';
	$thumb = '';
	if ( $attachment_id > 0 ) {
		$mime  = (string) get_post_mime_type( $attachment_id );
		$url   = (string) wp_get_attachment_url( $attachment_id );
		$thumb = (string) wp_get_attachment_image_url( $attachment_id, 'thumbnail' );
	}
	if ( $url === '' ) {
		$url = tilfy_medya_depo_dosya_url( $dosya_yolu );
	}
	if ( $mime === '' ) {
		$ft = wp_check_filetype( $dosya_adi );
		$mime = (string) ( $ft['type'] ?? '' );
	}
	$video = $mime !== '' && strpos( $mime, 'video/' ) === 0;
	if ( ! $video && tilfy_medya_disk_uzantisi_gecerli( $dosya_adi ) ) {
		$video = (bool) preg_match( '/\.(mp4|mov)$/i', $dosya_adi );
	}
	$engel = tilfy_medya_silme_engeli( $attachment_id, $icerik );
	$paylasimlar = $icerik ? tilfy_medya_icerik_paylasimlari( (int) $icerik->id ) : array();
	$yuklendi    = false;
	$bekleyen    = false;
	foreach ( $paylasimlar as $p ) {
		if ( ( $p['durum'] ?? '' ) === 'yuklendi' ) {
			$yuklendi = true;
		}
		if ( in_array( $p['durum'] ?? '', array( 'beklemede', 'yukleniyor', 'zamanlandi' ), true ) ) {
			$bekleyen = true;
		}
	}
	$indirilme = '';
	if ( $attachment_id > 0 ) {
		$indirilme = get_post_time( 'Y-m-d H:i:s', false, $attachment_id, true );
	}
	if ( $indirilme === '' ) {
		$indirilme = gmdate( 'Y-m-d H:i:s', (int) filemtime( $dosya_yolu ) );
	}
	return array(
		'attachment_id'   => $attachment_id,
		'dosya_adi'       => $dosya_adi,
		'dosya_yolu'      => $dosya_yolu,
		'boyut'           => $boyut,
		'boyut_etiket'    => tilfy_medya_boyut_format( $boyut ),
		'mime'            => $mime,
		'video'           => $video,
		'url'             => esc_url_raw( $url ),
		'thumb'           => esc_url_raw( $thumb ),
		'indirilme'       => $indirilme,
		'indirilme_ts'    => strtotime( $indirilme ),
		'icerik_id'       => $icerik ? (int) $icerik->id : 0,
		'baslik'          => $icerik ? sanitize_text_field( (string) ( $icerik->baslik ?? '' ) ) : '',
		'kaynak_platform' => $icerik ? sanitize_key( (string) ( $icerik->kaynak_platform ?? '' ) ) : '',
		'kaynak_id'       => $icerik ? sanitize_text_field( (string) ( $icerik->kaynak_id ?? '' ) ) : '',
		'medya_tipi'      => $icerik ? sanitize_key( (string) ( $icerik->medya_tipi ?? '' ) ) : '',
		'paylasimlar'     => $paylasimlar,
		'yuklendi'        => $yuklendi,
		'bekleyen'        => $bekleyen,
		'silinebilir'     => $engel === '',
		'silme_engeli'    => $engel,
		'yetim'           => ! $icerik || (int) ( $icerik->medya_dosya_id ?? 0 ) <= 0,
	);
}

function tilfy_medya_depo_tarama_kokleri() {
	$kokler = array( wp_normalize_path( untrailingslashit( tilfy_medya_depo_dizini() ) ) );
	$upload = tilfy_wp_upload_dir_ham();
	$varsayilan = wp_normalize_path( untrailingslashit( trailingslashit( $upload['basedir'] ) . 'tilfy-medya' ) );
	if ( ! in_array( $varsayilan, $kokler, true ) ) {
		$kokler[] = $varsayilan;
	}
	return array_values( array_filter( $kokler ) );
}

function tilfy_medya_depo_disk_tara() {
	$cikti = array();
	foreach ( tilfy_medya_depo_tarama_kokleri() as $depo ) {
		if ( ! is_dir( $depo ) ) {
			continue;
		}
		try {
			$iterator = new RecursiveIteratorIterator(
				new RecursiveDirectoryIterator( $depo, RecursiveDirectoryIterator::SKIP_DOTS )
			);
		} catch ( Exception $e ) {
			continue;
		}
		foreach ( $iterator as $dosya ) {
			if ( ! $dosya->isFile() ) {
				continue;
			}
			$adi = $dosya->getFilename();
			if ( ! tilfy_medya_disk_uzantisi_gecerli( $adi ) ) {
				continue;
			}
			$cikti[] = wp_normalize_path( $dosya->getPathname() );
		}
	}
	return array_values( array_unique( $cikti ) );
}

function tilfy_medya_depo_girdi_ekle( &$harita, $yol, $attachment_id = 0, $icerik_id = 0 ) {
	$yol = wp_normalize_path( (string) $yol );
	if ( $yol === '' || ! is_file( $yol ) ) {
		return;
	}
	$attachment_id = (int) $attachment_id;
	$icerik_id     = (int) $icerik_id;
	if ( ! isset( $harita[ $yol ] ) ) {
		$harita[ $yol ] = array(
			'yol'           => $yol,
			'attachment_id' => $attachment_id,
			'icerik_id'     => $icerik_id,
		);
		return;
	}
	if ( $attachment_id > 0 && (int) ( $harita[ $yol ]['attachment_id'] ?? 0 ) <= 0 ) {
		$harita[ $yol ]['attachment_id'] = $attachment_id;
	}
	if ( $icerik_id > 0 && (int) ( $harita[ $yol ]['icerik_id'] ?? 0 ) <= 0 ) {
		$harita[ $yol ]['icerik_id'] = $icerik_id;
	}
}

function tilfy_medya_depo_tum_girdiler() {
	global $wpdb;
	$harita = array();
	$it     = tilfy_tablo( 'icerik' );

	foreach ( tilfy_medya_depo_disk_tara() as $yol ) {
		tilfy_medya_depo_girdi_ekle( $harita, $yol );
	}
	foreach ( tilfy_medya_uploads_disk_tilfy_tara() as $yol ) {
		tilfy_medya_depo_girdi_ekle( $harita, $yol );
	}

	$icerik_dosya = $wpdb->get_results(
		"SELECT id, medya_dosya_id FROM {$it} WHERE medya_dosya_id > 0"
	);
	foreach ( (array) $icerik_dosya as $satir ) {
		$aid = (int) $satir->medya_dosya_id;
		$yol = tilfy_medya_attachment_dosya_yolu( $aid );
		tilfy_medya_depo_girdi_ekle( $harita, $yol, $aid, (int) $satir->id );
	}

	foreach ( tilfy_medya_tilfy_attachment_ids() as $aid ) {
		$yol = tilfy_medya_attachment_dosya_yolu( $aid );
		tilfy_medya_depo_girdi_ekle( $harita, $yol, $aid );
	}

	foreach ( $harita as $yol => $girdi ) {
		if ( (int) ( $girdi['attachment_id'] ?? 0 ) > 0 ) {
			continue;
		}
		$aid = tilfy_medya_attachment_id_dosya_yolu( $yol );
		if ( $aid > 0 ) {
			$harita[ $yol ]['attachment_id'] = $aid;
		}
	}

	return array_values( $harita );
}

function tilfy_medya_depo_listele( $args = array() ) {
	global $wpdb;
	$arama  = trim( (string) ( $args['arama'] ?? '' ) );
	$filtre = sanitize_key( (string) ( $args['filtre'] ?? 'tumu' ) );
	$sayfa  = max( 1, (int) ( $args['sayfa'] ?? 1 ) );
	$per    = max( 10, min( 60, (int) ( $args['per_page'] ?? 30 ) ) );
	$it     = tilfy_tablo( 'icerik' );

	$ham_satirlar = array();
	foreach ( tilfy_medya_depo_tum_girdiler() as $girdi ) {
		$yol = (string) ( $girdi['yol'] ?? '' );
		$aid = (int) ( $girdi['attachment_id'] ?? 0 );
		$icerik = null;
		if ( ! empty( $girdi['icerik_id'] ) ) {
			$icerik = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$it} WHERE id = %d", (int) $girdi['icerik_id'] ) );
		}
		$row = tilfy_medya_depo_satir_olustur( $yol, $icerik, $aid );
		if ( ! $row ) {
			continue;
		}
		if ( $arama !== '' ) {
			$igne = strtolower( $arama );
			$metin = strtolower(
				$row['dosya_adi'] . ' ' . $row['baslik'] . ' ' . $row['kaynak_id'] . ' ' . $row['dosya_yolu'] . ' ' . (int) $row['attachment_id'] . ' ' . (int) $row['icerik_id']
			);
			if ( strpos( $metin, $igne ) === false ) {
				continue;
			}
		}
		if ( $filtre === 'silinebilir' && ! $row['silinebilir'] ) {
			continue;
		}
		if ( $filtre === 'yuklendi' && ! $row['yuklendi'] ) {
			continue;
		}
		if ( $filtre === 'bekleyen' && ! $row['bekleyen'] ) {
			continue;
		}
		$ham_satirlar[] = $row;
	}

	usort(
		$ham_satirlar,
		function ( $a, $b ) {
			return (int) ( $b['indirilme_ts'] ?? 0 ) <=> (int) ( $a['indirilme_ts'] ?? 0 );
		}
	);

	$toplam = count( $ham_satirlar );
	$offset = ( $sayfa - 1 ) * $per;
	$satirlar = array_slice( $ham_satirlar, $offset, $per );

	$toplam_boyut = 0;
	foreach ( $ham_satirlar as $satir ) {
		$toplam_boyut += (int) ( $satir['boyut'] ?? 0 );
	}

	return array(
		'satirlar'     => $satirlar,
		'yetimler'     => array(),
		'toplam'       => $toplam,
		'sayfa'        => $sayfa,
		'sayfa_sayisi' => max( 1, (int) ceil( $toplam / $per ) ),
		'per_page'     => $per,
		'depo_boyut'   => $toplam_boyut,
		'depo_yol'     => tilfy_medya_uploads_kok(),
		'depo_not'     => 'tilfy-* dosyaları uploads ve tilfy-medya klasörlerinde aranır',
	);
}

function tilfy_medya_disk_dosya_sil( $dosya_yolu ) {
	$dosya_yolu = wp_normalize_path( (string) $dosya_yolu );
	if ( ! tilfy_medya_depo_yolu_gecerli_mi( $dosya_yolu ) ) {
		return array( 'ok' => false, 'mesaj' => 'Geçersiz dosya yolu' );
	}
	$aid = tilfy_medya_attachment_id_dosya_yolu( $dosya_yolu );
	if ( $aid > 0 ) {
		return tilfy_medya_dosya_sil( $aid );
	}
	$icerik = tilfy_medya_icerik_bul( 0, basename( $dosya_yolu ) );
	$engel  = tilfy_medya_silme_engeli( 0, $icerik );
	if ( $engel !== '' ) {
		return array( 'ok' => false, 'mesaj' => $engel );
	}
	if ( ! @unlink( $dosya_yolu ) ) {
		return array( 'ok' => false, 'mesaj' => 'Dosya sunucudan silinemedi' );
	}
	return array( 'ok' => true, 'mesaj' => 'Silindi' );
}

function tilfy_medya_dosya_sil( $attachment_id ) {
	$attachment_id = (int) $attachment_id;
	if ( $attachment_id <= 0 ) {
		return array( 'ok' => false, 'mesaj' => 'Geçersiz dosya' );
	}
	$icerik = null;
	global $wpdb;
	$icerik = $wpdb->get_row(
		$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'icerik' ) . ' WHERE medya_dosya_id = %d LIMIT 1', $attachment_id )
	);
	$engel = tilfy_medya_silme_engeli( $attachment_id, $icerik );
	if ( $engel !== '' ) {
		return array( 'ok' => false, 'mesaj' => $engel );
	}
	$wpdb->update(
		tilfy_tablo( 'icerik' ),
		array(
			'medya_dosya_id' => 0,
			'guncelleme'     => current_time( 'mysql' ),
		),
		array( 'medya_dosya_id' => $attachment_id )
	);
	if ( function_exists( 'tilfy_medya_tilfy_dosyasi_mi' ) && ! tilfy_medya_tilfy_dosyasi_mi( $attachment_id ) ) {
		return array( 'ok' => true, 'mesaj' => 'Baglantı kaldirildi (WP medyasi korundu)' );
	}
	if ( ! wp_delete_attachment( $attachment_id, true ) ) {
		$dosya_yolu = get_attached_file( $attachment_id );
		if ( $dosya_yolu && tilfy_medya_depo_yolu_gecerli_mi( $dosya_yolu ) && @unlink( $dosya_yolu ) ) {
			return array( 'ok' => true, 'mesaj' => 'Silindi' );
		}
		return array( 'ok' => false, 'mesaj' => 'Dosya sunucudan silinemedi' );
	}
	return array( 'ok' => true, 'mesaj' => 'Silindi' );
}

function tilfy_medya_dosyalari_sil( $ids, $disk_yollar = array() ) {
	$ids         = array_values( array_unique( array_filter( array_map( 'intval', (array) $ids ) ) ) );
	$disk_yollar = array_values( array_unique( array_filter( array_map( 'wp_normalize_path', (array) $disk_yollar ) ) ) );
	$silinen     = 0;
	$atlanan     = 0;
	$hatalar     = array();
	foreach ( $ids as $id ) {
		$sonuc = tilfy_medya_dosya_sil( $id );
		if ( ! empty( $sonuc['ok'] ) ) {
			++$silinen;
		} else {
			++$atlanan;
			$hatalar[] = '#' . $id . ': ' . ( $sonuc['mesaj'] ?? 'Hata' );
		}
	}
	foreach ( $disk_yollar as $yol ) {
		$sonuc = tilfy_medya_disk_dosya_sil( $yol );
		if ( ! empty( $sonuc['ok'] ) ) {
			++$silinen;
		} else {
			++$atlanan;
			$hatalar[] = basename( $yol ) . ': ' . ( $sonuc['mesaj'] ?? 'Hata' );
		}
	}
	return array(
		'silinen' => $silinen,
		'atlanan' => $atlanan,
		'hatalar' => $hatalar,
	);
}

function tilfy_icerik_yerel_medya_zorla_sil( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return 0;
	}
	$it   = tilfy_tablo( 'icerik' );
	$onek = 'tilfy-' . $icerik_id . '-';
	$like = $wpdb->esc_like( $onek ) . '%';
	$ids  = array_map(
		'intval',
		(array) $wpdb->get_col(
			$wpdb->prepare(
				"SELECT p.ID FROM {$wpdb->posts} p
				INNER JOIN {$wpdb->postmeta} pm ON pm.post_id = p.ID AND pm.meta_key = '_wp_attached_file'
				WHERE p.post_type = 'attachment'
				AND p.post_status IN ('inherit','private')
				AND pm.meta_value LIKE %s",
				$like
			)
		)
	);
	$icerik = $wpdb->get_row( $wpdb->prepare( "SELECT medya_dosya_id FROM {$it} WHERE id = %d", $icerik_id ) );
	if ( $icerik && (int) $icerik->medya_dosya_id > 0 ) {
		$ids[] = (int) $icerik->medya_dosya_id;
	}
	$ids = array_values( array_unique( array_filter( $ids ) ) );
	$wpdb->update(
		$it,
		array(
			'medya_dosya_id' => 0,
			'guncelleme'     => current_time( 'mysql' ),
		),
		array( 'id' => $icerik_id )
	);
	$silinen = 0;
	foreach ( $ids as $aid ) {
		if ( function_exists( 'tilfy_medya_tilfy_dosyasi_mi' ) && ! tilfy_medya_tilfy_dosyasi_mi( $aid ) ) {
			continue;
		}
		if ( wp_delete_attachment( $aid, true ) ) {
			++$silinen;
			continue;
		}
		$yol = get_attached_file( $aid );
		if ( $yol && is_file( $yol ) && @unlink( $yol ) ) {
			++$silinen;
		}
	}
	if ( function_exists( 'tilfy_medya_uploads_disk_tilfy_tara' ) ) {
		foreach ( tilfy_medya_uploads_disk_tilfy_tara() as $yol ) {
			if ( strpos( basename( $yol ), $onek ) !== 0 ) {
				continue;
			}
			if ( is_file( $yol ) && @unlink( $yol ) ) {
				++$silinen;
			}
		}
	}
	return $silinen;
}

function tilfy_icerik_kapak_zorla_sil( $icerik_id ) {
	global $wpdb;
	$icerik_id = (int) $icerik_id;
	if ( $icerik_id <= 0 ) {
		return 0;
	}
	$it     = tilfy_tablo( 'icerik' );
	$icerik = $wpdb->get_row( $wpdb->prepare( "SELECT kapak_dosya_id FROM {$it} WHERE id = %d", $icerik_id ) );
	$ids    = array();
	if ( $icerik && (int) $icerik->kapak_dosya_id > 0 ) {
		$ids[] = (int) $icerik->kapak_dosya_id;
	}
	$meta_ids = array_map(
		'intval',
		(array) $wpdb->get_col(
			$wpdb->prepare(
				"SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_tilfy_kapak_icerik_id' AND meta_value = %d",
				$icerik_id
			)
		)
	);
	$ids      = array_values( array_unique( array_filter( array_merge( $ids, $meta_ids ) ) ) );
	$onek     = 'tilfy-kapak-' . $icerik_id . '-';
	$silinen  = 0;
	$wpdb->update(
		$it,
		array(
			'kapak_dosya_id' => 0,
			'guncelleme'     => current_time( 'mysql' ),
		),
		array( 'id' => $icerik_id )
	);
	foreach ( $ids as $aid ) {
		if ( function_exists( 'tilfy_medya_tilfy_dosyasi_mi' ) && ! tilfy_medya_tilfy_dosyasi_mi( $aid ) ) {
			continue;
		}
		if ( wp_delete_attachment( $aid, true ) ) {
			++$silinen;
			continue;
		}
		$yol = get_attached_file( $aid );
		if ( $yol && is_file( $yol ) && @unlink( $yol ) ) {
			++$silinen;
		}
	}
	if ( function_exists( 'tilfy_medya_uploads_disk_tilfy_tara' ) ) {
		foreach ( tilfy_medya_uploads_disk_tilfy_tara() as $yol ) {
			if ( strpos( basename( $yol ), $onek ) !== 0 ) {
				continue;
			}
			if ( is_file( $yol ) && @unlink( $yol ) ) {
				++$silinen;
			}
		}
	}
	return $silinen;
}
