<?php
/**
 * Plugin Name: Tilfy
 * Description: Sosyal medya icerik yonetimi, capraz paylasim ve istatistik paneli (Instagram, Facebook, YouTube, LinkedIn, TikTok, Threads).
 * Version: 1.22.0
 * Author: Ahmet Celal Kupeli
 * Author URI: https://iprct.net
 * License: GPLv2 or later
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: tilfy
 * Domain Path: /lang
 */

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

define( 'TILFY_SURUM', '1.22.0' );
define( 'TILFY_META_GRAPH_SURUM', 'v25.0' );
define( 'TILFY_LINKEDIN_API_SURUM', '202606' );
define( 'TILFY_YOL', plugin_dir_path( __FILE__ ) );
define( 'TILFY_URL', plugin_dir_url( __FILE__ ) );

require_once TILFY_YOL . 'includes/dil.php';

function tilfy_diag_log( $mesaj ) {
	$opts = get_option( 'tilfy_ayarlar', array() );
	if ( ! is_array( $opts ) || ( $opts['log_debug'] ?? '0' ) !== '1' ) {
		return;
	}
	$upload = wp_upload_dir();
	if ( ! empty( $upload['error'] ) || empty( $upload['basedir'] ) ) {
		return;
	}
	$dir = trailingslashit( $upload['basedir'] ) . 'tilfy';
	if ( ! is_dir( $dir ) ) {
		wp_mkdir_p( $dir );
	}
	if ( ! is_dir( $dir ) ) {
		return;
	}
	$dosya = trailingslashit( $dir ) . 'tilfy-debug.log';
	$satir = gmdate( 'Y-m-d H:i:s' ) . ' [php] ' . $mesaj . "\n";
	@file_put_contents( $dosya, $satir, FILE_APPEND | LOCK_EX );
}

function tilfy_tablo( $ek ) {
	global $wpdb;
	return $wpdb->prefix . 'tilfy_' . $ek;
}

function tilfy_sql_in_ints( $idler ) {
	$idler = array_values( array_filter( array_map( 'intval', (array) $idler ) ) );
	if ( empty( $idler ) ) {
		return null;
	}
	return array(
		'yer'      => implode( ',', array_fill( 0, count( $idler ), '%d' ) ),
		'degerler' => $idler,
	);
}

function tilfy_cron_zamanlari( $zamanlar ) {
	$zamanlar['tilfy_dakika'] = array(
		'interval' => 60,
		'display'  => 'Tilfy (1 dk)',
	);
	return $zamanlar;
}

function tilfy_etkinlestir() {
	tilfy_diag_log( 'etkinlestir basladi PHP=' . PHP_VERSION );

	try {
		$veritabani = TILFY_YOL . 'includes/veritabani.php';
		if ( ! is_readable( $veritabani ) ) {
			tilfy_diag_log( 'HATA: veritabani.php okunamadi: ' . $veritabani );
			return;
		}
		require_once $veritabani;
		require_once TILFY_YOL . 'includes/log.php';
		if ( ! function_exists( 'tilfy_tablolari_olustur' ) ) {
			tilfy_diag_log( 'HATA: tilfy_tablolari_olustur yok' );
			return;
		}
		global $wpdb;
		$wpdb->suppress_errors( true );
		tilfy_tablolari_olustur();
		$wpdb->suppress_errors( false );
		if ( ! empty( $wpdb->last_error ) ) {
			tilfy_diag_log( 'wpdb uyari: ' . $wpdb->last_error );
		}
		if ( function_exists( 'tilfy_veritabani_migrate' ) ) {
			tilfy_veritabani_migrate();
		}
		if ( function_exists( 'tilfy_log_dosya_koru' ) ) {
			tilfy_log_dosya_koru();
		}
		update_option( 'tilfy_db_surum', TILFY_SURUM, false );
		if ( ! wp_next_scheduled( 'tilfy_kuyruk_isle' ) ) {
			wp_schedule_event( time() + 60, 'tilfy_dakika', 'tilfy_kuyruk_isle' );
		}
		tilfy_diag_log( 'etkinlestir tamam tablolar kuruldu' );
	} catch ( Throwable $e ) {
		tilfy_diag_log( 'FATAL etkinlestir: ' . $e->getMessage() . ' @ ' . $e->getFile() . ':' . $e->getLine() );
		throw $e;
	}
}

function tilfy_devre_disi() {
	wp_clear_scheduled_hook( 'tilfy_kuyruk_isle' );
}

function tilfy_cron_yedek_gerekli_mi() {
	if ( get_transient( 'tilfy_kuyruk_calismasi_gerekli' ) ) {
		return true;
	}
	if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
		return true;
	}
	$next = wp_next_scheduled( 'tilfy_kuyruk_isle' );
	if ( ! $next ) {
		return true;
	}
	return $next < ( (int) current_time( 'timestamp' ) - 90 );
}

function tilfy_cron_minimal_yukle() {
	static $yuklendi = false;
	if ( $yuklendi || ! defined( 'TILFY_YOL' ) ) {
		return;
	}
	$yuklendi = true;
	$liste    = array(
		'veritabani.php',
		'ayarlar.php',
		'platformlar.php',
		'senkron.php',
		'platform-ayar.php',
		'youtube-kota.php',
		'youtube-eslestir.php',
		'yinelenen.php',
		'log.php',
		'guvenlik.php',
		'medya-depo.php',
		'medya.php',
		'kapak-havuz.php',
		'medya-kapak.php',
		'kuyruk-islem-yoneticisi.php',
		'kuyruk.php',
		'zamanlama.php',
		'otomasyon.php',
	);
	foreach ( $liste as $dosya ) {
		$yol = TILFY_YOL . 'includes/' . $dosya;
		if ( is_readable( $yol ) ) {
			require_once $yol;
		}
	}
	if ( function_exists( 'tilfy_tablolari_olustur' ) && get_option( 'tilfy_db_surum' ) !== TILFY_SURUM ) {
		tilfy_tablolari_olustur();
		if ( function_exists( 'tilfy_veritabani_migrate' ) ) {
			tilfy_veritabani_migrate();
		}
		update_option( 'tilfy_db_surum', TILFY_SURUM, false );
	}
}

function tilfy_cron_yedek_tick() {
	if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
		return;
	}
	if ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) {
		return;
	}
	if ( ! tilfy_cron_yedek_gerekli_mi() ) {
		return;
	}
	$son = (int) get_transient( 'tilfy_cron_yedek_son' );
	if ( $son > 0 && ( time() - $son ) < 55 ) {
		return;
	}
	set_transient( 'tilfy_cron_yedek_son', time(), 120 );
	tilfy_cron_minimal_yukle();
	if ( function_exists( 'tilfy_kuyruk_calistir' ) ) {
		tilfy_kuyruk_calistir();
	}
	if ( function_exists( 'tilfy_zamanlanmis_paylasim_kuyruga_al' ) ) {
		tilfy_zamanlanmis_paylasim_kuyruga_al();
	}
	if ( function_exists( 'tilfy_otomasyon_batch_sirali_tum_kontrol' ) ) {
		tilfy_otomasyon_batch_sirali_tum_kontrol();
	}
	if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON && function_exists( 'tilfy_kuyruk_loopback_tetik' ) ) {
		$bekleyen = function_exists( 'tilfy_kuyruk_bekleyen_say' ) ? tilfy_kuyruk_bekleyen_say() : 0;
		$gecikmis = function_exists( 'tilfy_zamanlanmis_paylasim_gecikmis_say' ) ? tilfy_zamanlanmis_paylasim_gecikmis_say() : 0;
		if ( $bekleyen > 0 || $gecikmis > 0 ) {
			tilfy_kuyruk_loopback_tetik();
		}
	}
}

register_activation_hook( __FILE__, 'tilfy_etkinlestir' );
register_deactivation_hook( __FILE__, 'tilfy_devre_disi' );
add_filter( 'cron_schedules', 'tilfy_cron_zamanlari' );
add_action( 'shutdown', 'tilfy_cron_yedek_tick', 99 );

add_action( 'init', 'tilfy_frontend_bootstrap', 0 );
add_action( 'init', 'tilfy_bootstrap', 5 );

function tilfy_rest_istegi_mi() {
	if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
		return true;
	}
	$uri = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
	if ( $uri === '' ) {
		return false;
	}
	return strpos( $uri, '/wp-json/' ) !== false || strpos( $uri, 'rest_route=' ) !== false;
}

function tilfy_frontend_bootstrap() {
	static $yuklendi = false;
	if ( $yuklendi || ! defined( 'TILFY_YOL' ) ) {
		return;
	}
	$yuklendi = true;
	$dosyalar = array(
		'veritabani.php',
		'guvenlik.php',
		'ayarlar.php',
		'platformlar.php',
		'galeri-ayarlar.php',
		'medya-kapak.php',
		'ikonlar.php',
		'galeri.php',
	);
	foreach ( $dosyalar as $dosya ) {
		$yol = TILFY_YOL . 'includes/' . $dosya;
		if ( is_readable( $yol ) ) {
			require_once $yol;
		}
	}
	if ( function_exists( 'tilfy_galeri_kisa_kodlari_kaydet' ) ) {
		tilfy_galeri_kisa_kodlari_kaydet();
	}
}

function tilfy_bootstrap() {
	static $yuklendi = false;
	if ( $yuklendi ) {
		return;
	}

	$gerekli = is_admin() || wp_doing_cron() || tilfy_rest_istegi_mi() || ( defined( 'WP_CLI' ) && WP_CLI );
	if ( ! $gerekli ) {
		tilfy_frontend_bootstrap();
		return;
	}

	$yuklendi = true;
	tilfy_diag_log( 'bootstrap basladi' );

	if ( version_compare( PHP_VERSION, '7.4', '<' ) ) {
		add_action(
			'admin_notices',
			function () {
				echo '<div class="notice notice-error"><p>Tilfy icin PHP 7.4+ gerekir. Su an: ' . esc_html( PHP_VERSION ) . '</p></div>';
			}
		);
		tilfy_diag_log( 'PHP surumu dusuk: ' . PHP_VERSION );
		return;
	}

	$dosyalar = array(
		'guvenlik.php',
		'veritabani.php',
		'ayarlar.php',
		'platformlar.php',
		'senkron.php',
		'telif.php',
		'ikonlar.php',
		'medya-depo.php',
		'medya-kapak.php',
		'medya-temizlik.php',
		'medya.php',
		'kapak-havuz.php',
		'log.php',
		'diag-log.php',
		'platform-ayar.php',
		'kuyruk.php',
		'kuyruk-islem-yoneticisi.php',
		'otomasyon.php',
		'zamanlama.php',
		'yinelenen.php',
		'youtube-eslestir.php',
		'temizlik.php',
		'baglanti-saglik.php',
		'oauth.php',
		'youtube-kota.php',
		'yonetim.php',
		'galeri-ayarlar.php',
		'galeri.php',
		'rest.php',
	);

	foreach ( $dosyalar as $dosya ) {
		$yol = TILFY_YOL . 'includes/' . $dosya;
		if ( ! is_readable( $yol ) ) {
			tilfy_diag_log( 'HATA eksik dosya: ' . $yol );
			continue;
		}
		try {
			require_once $yol;
			tilfy_diag_log( 'yuklendi: ' . $dosya );
		} catch ( Throwable $e ) {
			tilfy_diag_log( 'FATAL ' . $dosya . ': ' . $e->getMessage() . ' @ ' . $e->getFile() . ':' . $e->getLine() );
			return;
		}
	}

	add_action( 'tilfy_kuyruk_isle', 'tilfy_kuyruk_calistir' );
	add_action( 'tilfy_kapak_tara_tick', 'tilfy_kapak_tara_tick_calistir' );

	if ( function_exists( 'tilfy_tablolari_olustur' ) && get_option( 'tilfy_db_surum' ) !== TILFY_SURUM ) {
		tilfy_tablolari_olustur();
		if ( function_exists( 'tilfy_veritabani_migrate' ) ) {
			tilfy_veritabani_migrate();
		}
		update_option( 'tilfy_db_surum', TILFY_SURUM, false );
	}
	if ( function_exists( 'tilfy_log_dosya_koru' ) ) {
		tilfy_log_dosya_koru();
	}

	if ( ! wp_next_scheduled( 'tilfy_kuyruk_isle' ) ) {
		wp_schedule_event( time() + 300, 'tilfy_dakika', 'tilfy_kuyruk_isle' );
	}

	tilfy_diag_log( 'bootstrap tamam' );
}
