<?php

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

function tilfy_log_klasor_yolu() {
	$upload = function_exists( 'tilfy_wp_upload_dir_ham' ) ? tilfy_wp_upload_dir_ham() : wp_upload_dir();
	if ( ! empty( $upload['error'] ) || empty( $upload['basedir'] ) ) {
		return '';
	}
	$dir = trailingslashit( $upload['basedir'] ) . 'tilfy';
	if ( ! is_dir( $dir ) ) {
		wp_mkdir_p( $dir );
	}
	return is_dir( $dir ) ? $dir : '';
}

function tilfy_islem_log_dosya_yolu() {
	$dir = tilfy_log_klasor_yolu();
	if ( $dir === '' ) {
		return '';
	}
	return trailingslashit( $dir ) . 'tilfy-islem.log';
}


function tilfy_log_dosya_koru() {
	$dir = tilfy_log_klasor_yolu();
	if ( $dir === '' || ! is_writable( $dir ) ) {
		return;
	}
	$htaccess = trailingslashit( $dir ) . '.htaccess';
	$blok     = "# Tilfy log korumasi\n<IfModule mod_authz_core.c>\n\tRequire all denied\n</IfModule>\n<IfModule !mod_authz_core.c>\n\tDeny from all\n</IfModule>\n";
	if ( is_readable( $htaccess ) ) {
		$mevcut = (string) file_get_contents( $htaccess );
		if ( strpos( $mevcut, 'Tilfy log korumasi' ) !== false ) {
			return;
		}
	}
	@file_put_contents( $htaccess, $blok, LOCK_EX );
}


function tilfy_islem_log( $tip, $mesaj, $ekstra = array() ) {
	if ( function_exists( 'tilfy_log_islem_aktif_mi' ) && ! tilfy_log_islem_aktif_mi() ) {
		return;
	}
	$tip   = sanitize_key( (string) $tip );
	$mesaj = trim( (string) $mesaj );
	if ( $mesaj === '' ) {
		return;
	}
	$parcalar = array( gmdate( 'Y-m-d H:i:s' ), $tip );
	if ( ! empty( $ekstra['platform'] ) ) {
		$parcalar[] = sanitize_key( (string) $ekstra['platform'] );
	}
	if ( ! empty( $ekstra['paylasim_id'] ) ) {
		$parcalar[] = 'paylasim#' . (int) $ekstra['paylasim_id'];
	}
	if ( ! empty( $ekstra['icerik_id'] ) ) {
		$parcalar[] = 'icerik#' . (int) $ekstra['icerik_id'];
	}
	$parcalar[] = $mesaj;
	$satir = implode( ' | ', $parcalar ) . "\n";
	$dosya = tilfy_islem_log_dosya_yolu();
	if ( $dosya === '' ) {
		return;
	}
	$dir = dirname( $dosya );
	if ( ! is_dir( $dir ) ) {
		wp_mkdir_p( $dir );
	}
	@file_put_contents( $dosya, $satir, FILE_APPEND | LOCK_EX );
}

function tilfy_islem_log_satirlari( $limit = 500, $paylasim_id = 0, $tip = '' ) {
	$dosya = tilfy_islem_log_dosya_yolu();
	if ( ! is_readable( $dosya ) ) {
		return array();
	}
	$icerik = file( $dosya, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
	if ( ! is_array( $icerik ) ) {
		return array();
	}
	$tip = sanitize_key( (string) $tip );
	if ( $tip !== '' ) {
		$tip_anahtar = ' | ' . $tip . ' |';
		$icerik      = array_values(
			array_filter(
				$icerik,
				function ( $satir ) use ( $tip_anahtar ) {
					return strpos( (string) $satir, $tip_anahtar ) !== false;
				}
			)
		);
	}
	if ( $paylasim_id > 0 ) {
		$anahtar = 'paylasim#' . (int) $paylasim_id;
		$icerik  = array_values(
			array_filter(
				$icerik,
				function ( $satir ) use ( $anahtar ) {
					return strpos( (string) $satir, $anahtar ) !== false;
				}
			)
		);
	}
	$limit = max( 1, min( 5000, (int) $limit ) );
	if ( count( $icerik ) > $limit ) {
		$icerik = array_slice( $icerik, -$limit );
	}
	return $icerik;
}

function tilfy_paylasim_log_ekle( $paylasim_id, $mesaj, $platform = '', $tip = 'paylasim' ) {
	$paylasim_id = (int) $paylasim_id;
	if ( $paylasim_id <= 0 || $mesaj === '' ) {
		return;
	}
	$anahtar = 'tilfy_paylasim_log_' . $paylasim_id;
	$liste   = get_option( $anahtar, array() );
	if ( ! is_array( $liste ) ) {
		$liste = array();
	}
	$liste[] = gmdate( 'Y-m-d H:i:s' ) . ' | ' . $mesaj;
	if ( count( $liste ) > 80 ) {
		$liste = array_slice( $liste, -80 );
	}
	update_option( $anahtar, $liste, false );
	tilfy_islem_log(
		$tip,
		$mesaj,
		array(
			'paylasim_id' => $paylasim_id,
			'platform'    => $platform,
		)
	);
}

function tilfy_paylasim_log_topla( $paylasim_id ) {
	global $wpdb;
	$paylasim_id = (int) $paylasim_id;
	$satirlar    = array();
	$paylasim    = $wpdb->get_row(
		$wpdb->prepare( 'SELECT durum, hata_mesaji, guncelleme, hedef_platform, icerik_id FROM ' . tilfy_tablo( 'paylasim' ) . ' WHERE id = %d', $paylasim_id )
	);
	if ( $paylasim ) {
		$satirlar[] = '- Paylasim #' . $paylasim_id . ' | ' . $paylasim->hedef_platform . ' | ' . $paylasim->durum . ' -';
		if ( $paylasim->hata_mesaji !== '' ) {
			$satirlar[] = 'Hata: ' . $paylasim->hata_mesaji;
		}
	}
	$kayitli = get_option( 'tilfy_paylasim_log_' . $paylasim_id, array() );
	if ( is_array( $kayitli ) ) {
		foreach ( $kayitli as $satir ) {
			$satirlar[] = (string) $satir;
		}
	}
	$kuyruk = $wpdb->get_results(
		'SELECT islem, durum, deneme, hata, guncelleme, payload FROM ' . tilfy_tablo( 'kuyruk' ) . ' ORDER BY id DESC LIMIT 80'
	);
	$kuyruk_eslesen = 0;
	foreach ( (array) $kuyruk as $is ) {
		$payload = json_decode( (string) ( $is->payload ?? '' ), true );
		if ( ! is_array( $payload ) || (int) ( $payload['paylasim_id'] ?? 0 ) !== $paylasim_id ) {
			continue;
		}
		$metin = $is->guncelleme . ' | kuyruk | ' . $is->islem . ' | ' . $is->durum . ' | deneme:' . (int) $is->deneme;
		if ( $is->hata !== '' ) {
			$metin .= ' | ' . $is->hata;
		}
		$satirlar[] = $metin;
		++$kuyruk_eslesen;
		if ( $kuyruk_eslesen >= 15 ) {
			break;
		}
	}
	$islem = tilfy_islem_log_satirlari( 200, $paylasim_id );
	foreach ( $islem as $satir ) {
		$satirlar[] = $satir;
	}
	if ( empty( $satirlar ) ) {
		$satirlar[] = 'Bu paylasim icin yukleme/senkron logu yok. Yeni paylasim veya senkron sonrasi kayit olusur.';
	}
	return array_values( array_unique( $satirlar ) );
}

function tilfy_log_dosya_yolu() {
	return tilfy_islem_log_dosya_yolu();
}

function tilfy_paylasim_sil( $paylasim_id ) {
	global $wpdb;
	$paylasim_id = (int) $paylasim_id;
	if ( $paylasim_id <= 0 ) {
		return 0;
	}
	if ( function_exists( 'tilfy_otomasyon_batch_paylasim_silindi' ) ) {
		tilfy_otomasyon_batch_paylasim_silindi( $paylasim_id );
	}
	if ( function_exists( 'tilfy_kuyruk_paylasim_iptal' ) ) {
		tilfy_kuyruk_paylasim_iptal( $paylasim_id );
	}
	delete_option( 'tilfy_paylasim_log_' . $paylasim_id );
	delete_option( 'tilfy_manuel_paket_' . $paylasim_id );
	$wpdb->delete( tilfy_tablo( 'paylasim' ), array( 'id' => $paylasim_id ) );
	return 1;
}

function tilfy_paylasim_yeniden_dene( $paylasim_id ) {
	global $wpdb;
	$paylasim_id = (int) $paylasim_id;
	if ( $paylasim_id <= 0 ) {
		return array( 'ok' => false, 'mesaj' => 'Gecersiz paylasim' );
	}
	$paylasim = $wpdb->get_row(
		$wpdb->prepare( 'SELECT * FROM ' . tilfy_tablo( 'paylasim' ) . ' WHERE id = %d', $paylasim_id )
	);
	if ( ! $paylasim ) {
		return array( 'ok' => false, 'mesaj' => 'Paylasim bulunamadi' );
	}
	if ( in_array( $paylasim->durum, array( 'yuklendi', 'manuel_bekliyor' ), true ) ) {
		return array( 'ok' => false, 'mesaj' => 'Tamamlanmis paylasim yeniden denenemez' );
	}
	if ( ! in_array( $paylasim->durum, array( 'hata', 'beklemede', 'yukleniyor', 'zamanlandi', 'sirada' ), true ) ) {
		return array( 'ok' => false, 'mesaj' => 'Bu durumda yeniden deneme yapilamaz' );
	}
	$wpdb->update(
		tilfy_tablo( 'paylasim' ),
		array(
			'durum'       => 'beklemede',
			'hata_mesaji' => '',
			'guncelleme'  => current_time( 'mysql' ),
		),
		array( 'id' => $paylasim_id )
	);
	$icerik_id = (int) $paylasim->icerik_id;
	if ( $icerik_id > 0 && function_exists( 'tilfy_kuyruk_icerik_medya_basarisiz_sifirla' ) ) {
		tilfy_kuyruk_icerik_medya_basarisiz_sifirla( $icerik_id );
	}
	tilfy_kuyruk_ekle(
		'paylasim_gonder',
		array(
			'paylasim_id' => $paylasim_id,
			'icerik_id'   => $icerik_id,
			'platform'    => $paylasim->hedef_platform,
		)
	);
	tilfy_paylasim_log_ekle( $paylasim_id, 'Yeniden deneme kuyruga eklendi', $paylasim->hedef_platform, 'yukleme' );
	return array( 'ok' => true, 'mesaj' => 'Kuyruga eklendi' );
}

function tilfy_paylasim_yoksay( $paylasim_id ) {
	$paylasim_id = (int) $paylasim_id;
	if ( $paylasim_id <= 0 ) {
		return array( 'ok' => false, 'mesaj' => 'Gecersiz paylasim' );
	}
	if ( function_exists( 'tilfy_kuyruk_paylasim_iptal' ) ) {
		tilfy_kuyruk_paylasim_iptal( $paylasim_id );
	}
	if ( ! function_exists( 'tilfy_paylasim_sil' ) || ! tilfy_paylasim_sil( $paylasim_id ) ) {
		return array( 'ok' => false, 'mesaj' => 'Paylasim yok sayilamadi' );
	}
	return array( 'ok' => true, 'mesaj' => 'Yok sayildi' );
}

function tilfy_paylasim_toplu_sil( $tip, $platform = '' ) {
	global $wpdb;
	$platform = sanitize_key( $platform );
	$tablo    = tilfy_tablo( 'paylasim' );
	if ( $tip === 'hata' ) {
		$idler = $wpdb->get_col( "SELECT id FROM {$tablo} WHERE durum = 'hata'" );
	} elseif ( $tip === 'basari' ) {
		$idler = $wpdb->get_col( "SELECT id FROM {$tablo} WHERE durum IN ('yuklendi','manuel_bekliyor')" );
	} elseif ( $tip === 'platform' && $platform !== '' ) {
		$idler = $wpdb->get_col( $wpdb->prepare( "SELECT id FROM {$tablo} WHERE hedef_platform = %s", $platform ) );
	} elseif ( $tip === 'tumu' ) {
		$idler = $wpdb->get_col( "SELECT id FROM {$tablo} WHERE 1=1" );
	} else {
		return 0;
	}
	$sayac = 0;
	foreach ( (array) $idler as $id ) {
		$sayac += tilfy_paylasim_sil( (int) $id );
	}
	return $sayac;
}
