<?php

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

function tilfy_yerel_loopback_izinli() {
	$ip = isset( $_SERVER['REMOTE_ADDR'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) ) : '';
	if ( $ip === '' ) {
		return false;
	}
	if ( in_array( $ip, array( '127.0.0.1', '::1' ), true ) ) {
		return true;
	}
	$yerel = array( '127.0.0.1', '::1' );
	if ( function_exists( 'gethostname' ) ) {
		$host = gethostname();
		if ( $host ) {
			$coz = gethostbynamel( $host );
			if ( is_array( $coz ) ) {
				$yerel = array_merge( $yerel, $coz );
			}
		}
	}
	$sunucu = isset( $_SERVER['SERVER_ADDR'] ) ? sanitize_text_field( wp_unslash( $_SERVER['SERVER_ADDR'] ) ) : '';
	if ( $sunucu !== '' ) {
		$yerel[] = $sunucu;
	}
	return in_array( $ip, array_unique( $yerel ), true );
}

function tilfy_yetki_kontrol() {
	if ( ! current_user_can( 'manage_options' ) ) {
		wp_die(
			esc_html( tilfy__( 'Yetkiniz yok.' ) ),
			esc_html( tilfy__( 'Tilfy' ) ),
			array( 'response' => 403 )
		);
	}
}

function tilfy_metin_kisalt( $metin, $uzunluk ) {
	$metin = (string) $metin;
	$uzunluk = (int) $uzunluk;
	if ( function_exists( 'mb_substr' ) ) {
		return mb_substr( $metin, 0, $uzunluk );
	}
	return substr( $metin, 0, $uzunluk );
}

function tilfy_admin_yonlendir_guvenli( $args = array() ) {
	$sayfa = isset( $args['page'] ) ? sanitize_key( $args['page'] ) : 'tilfy';
	$izinli = array( 'tilfy', 'tilfy-icerikler', 'tilfy-studyosu', 'tilfy-ayarlar', 'tilfy-paylasimlar', 'tilfy-takvim', 'tilfy-otomasyon', 'tilfy-islem-yoneticisi', 'tilfy-medya-temizlik' );
	if ( ! in_array( $sayfa, $izinli, true ) ) {
		$sayfa = 'tilfy';
	}
	unset( $args['page'] );
	$hedef = add_query_arg( $args, admin_url( 'admin.php?page=' . $sayfa ) );
	wp_safe_redirect( $hedef );
	exit;
}

function tilfy_gizli_anahtarlar() {
	return array(
		'meta_uygulama_gizli',
		'meta_erisim_jetonu',
		'meta_sayfa_jetonu',
		'threads_erisim_jetonu',
		'threads_uygulama_gizli',
		'youtube_istemci_gizli',
		'youtube_yenileme_jetonu',
		'youtube_erisim_jetonu',
		'linkedin_istemci_gizli',
		'linkedin_erisim_jetonu',
		'tiktok_istemci_gizli',
		'tiktok_erisim_jetonu',
		'tiktok_yenileme_jetonu',
	);
}

function tilfy_gizli_sifrele( $duz ) {
	$duz = (string) $duz;
	if ( $duz === '' ) {
		return '';
	}
	if ( ! function_exists( 'openssl_encrypt' ) || ! function_exists( 'random_bytes' ) ) {
		return '';
	}
	$anahtar = hash( 'sha256', wp_salt( 'tilfy_gizli' ), true );
	$iv      = random_bytes( 16 );
	$sifreli = openssl_encrypt( $duz, 'AES-256-CBC', $anahtar, OPENSSL_RAW_DATA, $iv );
	if ( $sifreli === false ) {
		return '';
	}
	return base64_encode( $iv . $sifreli );
}

function tilfy_gizli_coz( $sakli ) {
	$sakli = (string) $sakli;
	if ( $sakli === '' ) {
		return '';
	}
	$ham = base64_decode( $sakli, true );
	if ( $ham === false ) {
		return '';
	}
	if ( ! function_exists( 'openssl_decrypt' ) || strlen( $ham ) < 17 ) {
		$duz = base64_decode( $sakli, true );
		return is_string( $duz ) ? $duz : '';
	}
	$iv      = substr( $ham, 0, 16 );
	$sifreli = substr( $ham, 16 );
	$anahtar = hash( 'sha256', wp_salt( 'tilfy_gizli' ), true );
	$duz     = openssl_decrypt( $sifreli, 'AES-256-CBC', $anahtar, OPENSSL_RAW_DATA, $iv );
	return $duz === false ? '' : $duz;
}

function tilfy_izinli_medya_hostlari() {
	$hostlar = array(
		'cdninstagram.com',
		'fbcdn.net',
		'facebook.com',
		'instagram.com',
		'googleusercontent.com',
		'ytimg.com',
		'ggpht.com',
	);
	return apply_filters( 'tilfy_izinli_medya_hostlari', $hostlar );
}

function tilfy_url_izinli_mi( $url ) {
	$url = esc_url_raw( $url );
	if ( $url === '' ) {
		return false;
	}
	$scheme = strtolower( (string) wp_parse_url( $url, PHP_URL_SCHEME ) );
	if ( ! in_array( $scheme, array( 'http', 'https' ), true ) ) {
		return false;
	}
	$host = wp_parse_url( $url, PHP_URL_HOST );
	if ( ! is_string( $host ) || $host === '' ) {
		return false;
	}
	$host = strtolower( $host );
	foreach ( tilfy_izinli_medya_hostlari() as $izinli ) {
		if ( $host === $izinli || tilfy_host_soneki( $host, '.' . $izinli ) ) {
			return true;
		}
	}
	$site = wp_parse_url( home_url(), PHP_URL_HOST );
	if ( $site && ( $host === strtolower( $site ) || tilfy_host_soneki( $host, '.' . strtolower( $site ) ) ) ) {
		return true;
	}
	return false;
}

function tilfy_platform_dogrula( $platform ) {
	$platform = sanitize_key( $platform );
	return tilfy_platform_aktif_mi( $platform ) ? $platform : '';
}

function tilfy_rest_yanit_hata( $mesaj, $kod = 400 ) {
	return new WP_Error( 'tilfy_hata', sanitize_text_field( $mesaj ), array( 'status' => $kod ) );
}

function tilfy_host_soneki( $host, $sonek ) {
	$len = strlen( $sonek );
	return $len === 0 || substr( $host, -$len ) === $sonek;
}

function tilfy_http_multipart_post( $url, $alanlar, $dosya_alan, $dosya_yolu, $mime = '', $timeout = 120 ) {
	$url        = (string) $url;
	$dosya_alan = (string) $dosya_alan;
	$dosya_yolu = (string) $dosya_yolu;
	if ( $url === '' || $dosya_alan === '' || $dosya_yolu === '' || ! is_readable( $dosya_yolu ) ) {
		return new WP_Error( 'tilfy_http', 'Dosya yukleme parametreleri gecersiz' );
	}
	$icerik = file_get_contents( $dosya_yolu );
	if ( false === $icerik ) {
		return new WP_Error( 'tilfy_http', 'Dosya okunamadi' );
	}
	if ( $mime === '' ) {
		$ft   = wp_check_filetype( $dosya_yolu );
		$mime = ! empty( $ft['type'] ) ? (string) $ft['type'] : 'application/octet-stream';
	}
	$boundary = 'tilfy' . wp_generate_password( 24, false, false );
	$body     = '';
	foreach ( (array) $alanlar as $anahtar => $deger ) {
		$body .= '--' . $boundary . "\r\n";
		$body .= 'Content-Disposition: form-data; name="' . $anahtar . '"' . "\r\n\r\n";
		$body .= (string) $deger . "\r\n";
	}
	$ad    = basename( $dosya_yolu );
	$body .= '--' . $boundary . "\r\n";
	$body .= 'Content-Disposition: form-data; name="' . $dosya_alan . '"; filename="' . $ad . '"' . "\r\n";
	$body .= 'Content-Type: ' . $mime . "\r\n\r\n";
	$body .= $icerik . "\r\n";
	$body .= '--' . $boundary . "--\r\n";

	return wp_remote_post(
		$url,
		array(
			'timeout' => max( 30, (int) $timeout ),
			'headers' => array(
				'Content-Type' => 'multipart/form-data; boundary=' . $boundary,
			),
			'body'    => $body,
		)
	);
}

