<?php

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

function tilfy_threads_api_aktif_mi() {
	return tilfy_ayar_al( 'threads_erisim_jetonu' ) !== '' && tilfy_ayar_al( 'threads_kullanici_id' ) !== '';
}

function tilfy_threads_graph_istek( $uc, $args = array(), $metot = 'GET', $govde = null, $jeton = null ) {
	if ( $jeton === null || $jeton === '' ) {
		$jeton = tilfy_ayar_al( 'threads_erisim_jetonu' );
	}
	if ( $jeton === '' ) {
		return new WP_Error( 'tilfy_threads', 'Threads erisim jetonu eksik' );
	}
	$url = 'https://graph.threads.net/v1.0/' . ltrim( $uc, '/' );
	$args['access_token'] = $jeton;
	$secenek = array( 'timeout' => 90 );
	if ( $metot === 'POST' && $govde !== null ) {
		$secenek['body'] = $govde;
		$secenek['body']['access_token'] = $jeton;
		$yanit = wp_remote_post( $url, $secenek );
	} else {
		$yanit = wp_remote_get( add_query_arg( $args, $url ), $secenek );
	}
	if ( is_wp_error( $yanit ) ) {
		return $yanit;
	}
	$parsed = json_decode( wp_remote_retrieve_body( $yanit ), true );
	if ( ! is_array( $parsed ) ) {
		return new WP_Error( 'tilfy_threads', 'Gecersiz yanit' );
	}
	if ( isset( $parsed['error'] ) ) {
		return new WP_Error( 'tilfy_threads', $parsed['error']['message'] ?? 'Threads hata' );
	}
	return $parsed;
}

function tilfy_threads_konteyner_hazir_mi( $konteyner_id, $max_saniye = 120, $jeton = null ) {
	$konteyner_id = sanitize_text_field( $konteyner_id );
	if ( $konteyner_id === '' ) {
		return new WP_Error( 'tilfy_threads', 'Konteyner ID bos' );
	}
	$bitis = time() + max( 10, (int) $max_saniye );
	while ( time() < $bitis ) {
		$durum = tilfy_threads_graph_istek(
			$konteyner_id,
			array( 'fields' => 'status,error_message' ),
			'GET',
			null,
			$jeton
		);
		if ( is_wp_error( $durum ) ) {
			return $durum;
		}
		$st = (string) ( $durum['status'] ?? '' );
		if ( $st === 'FINISHED' ) {
			return true;
		}
		if ( $st === 'ERROR' ) {
			$hata = (string) ( $durum['error_message'] ?? 'Konteyner hatasi' );
			return new WP_Error( 'tilfy_threads', $hata );
		}
		if ( $st === 'EXPIRED' ) {
			return new WP_Error( 'tilfy_threads', 'Konteyner suresi doldu' );
		}
		sleep( 2 );
	}
	return new WP_Error( 'tilfy_threads', 'Konteyner hazir degil (zaman asimi)' );
}

function tilfy_threads_paylasim_gonder( $icerik, $paylasim ) {
	if ( ! tilfy_threads_api_aktif_mi() ) {
		return array( 'ok' => false, 'mesaj' => 'Threads baglantisi eksik' );
	}
	$kullanici_id = tilfy_ayar_al( 'threads_kullanici_id' );
	$jeton        = tilfy_ayar_al( 'threads_erisim_jetonu' );

	$medya            = '';
	$medya_bekleniyor = (int) ( $icerik->medya_dosya_id ?? 0 ) > 0
		|| trim( (string) ( $icerik->medya_url ?? '' ) ) !== ''
		|| ( function_exists( 'tilfy_icerik_meta_uzaktan_medya_mi' ) && tilfy_icerik_meta_uzaktan_medya_mi( $icerik ) );
	if ( function_exists( 'tilfy_icerik_medya_hazirla' ) ) {
		$medya_hazir = tilfy_icerik_medya_hazirla( $icerik );
		if ( is_wp_error( $medya_hazir ) ) {
			if ( $medya_bekleniyor ) {
				return array( 'ok' => false, 'mesaj' => $medya_hazir->get_error_message() );
			}
		} elseif ( function_exists( 'tilfy_medya_herkese_acik_url' ) ) {
			$medya = tilfy_medya_herkese_acik_url( (int) $medya_hazir['dosya_id'] );
		}
	}
	if ( $medya === '' ) {
		$medya = esc_url_raw( (string) $icerik->medya_url );
	}
	if ( $medya === '' && $medya_bekleniyor ) {
		return array( 'ok' => false, 'mesaj' => 'Threads medya hazirlanamadi' );
	}
	$aciklama  = (string) ( $paylasim->ozel_aciklama ?: $icerik->aciklama );
	$etiketler = (string) ( $paylasim->ozel_etiketler ?: $icerik->etiketler );
	if ( $etiketler !== '' ) {
		$aciklama .= "\n\n" . $etiketler;
	}
	$aciklama = trim( $aciklama );
	if ( $aciklama !== '' ) {
		if ( function_exists( 'tilfy_engine_metin_akilli_kirp' ) ) {
			$aciklama = tilfy_engine_metin_akilli_kirp( $aciklama, 500 );
		} elseif ( function_exists( 'tilfy_metin_kisalt' ) ) {
			$aciklama = tilfy_metin_kisalt( $aciklama, 500 );
		} elseif ( function_exists( 'mb_substr' ) ) {
			$aciklama = mb_substr( $aciklama, 0, 500 );
		} else {
			$aciklama = substr( $aciklama, 0, 500 );
		}
		if ( function_exists( 'mb_strlen' ) && mb_strlen( $aciklama ) > 500 ) {
			$aciklama = mb_substr( $aciklama, 0, 500 );
		} elseif ( strlen( $aciklama ) > 500 ) {
			$aciklama = substr( $aciklama, 0, 500 );
		}
	}

	$medya_tip = 'text';
	if ( $medya !== '' ) {
		if ( (int) $icerik->medya_dosya_id > 0 && function_exists( 'tilfy_medya_tipi_belirle' ) ) {
			$medya_tip = tilfy_medya_tipi_belirle( (int) $icerik->medya_dosya_id ) === 'image' ? 'image' : 'video';
		} elseif ( in_array( strtoupper( (string) $icerik->medya_tipi ), array( 'IMAGE', 'PHOTO' ), true ) ) {
			$medya_tip = 'image';
		} else {
			$medya_tip = 'video';
		}
	}

	$govde = array();
	if ( $medya_tip === 'text' ) {
		if ( $aciklama === '' ) {
			return array( 'ok' => false, 'mesaj' => 'Threads metin icerigi bos' );
		}
		$govde['media_type'] = 'TEXT';
		$govde['text']       = $aciklama;
	} elseif ( $medya_tip === 'image' ) {
		$govde['media_type'] = 'IMAGE';
		$govde['image_url']  = $medya;
		if ( $aciklama !== '' ) {
			$govde['text'] = $aciklama;
		}
	} else {
		$govde['media_type'] = 'VIDEO';
		$govde['video_url']  = $medya;
		if ( $aciklama !== '' ) {
			$govde['text'] = $aciklama;
		}
	}

	$konteyner = tilfy_threads_graph_istek( $kullanici_id . '/threads', array(), 'POST', $govde, $jeton );
	if ( is_wp_error( $konteyner ) ) {
		return array( 'ok' => false, 'mesaj' => $konteyner->get_error_message() );
	}
	$olusturma_id = (string) ( $konteyner['id'] ?? '' );
	if ( $olusturma_id === '' ) {
		return array( 'ok' => false, 'mesaj' => 'Threads konteyner olusturulamadi' );
	}
	if ( $medya_tip !== 'text' ) {
		$bekle = tilfy_threads_konteyner_hazir_mi( $olusturma_id, 300, $jeton );
		if ( is_wp_error( $bekle ) ) {
			return array( 'ok' => false, 'mesaj' => $bekle->get_error_message() );
		}
	}
	$yayin = tilfy_threads_graph_istek(
		$kullanici_id . '/threads_publish',
		array(),
		'POST',
		array( 'creation_id' => $olusturma_id ),
		$jeton
	);
	if ( is_wp_error( $yayin ) ) {
		return array( 'ok' => false, 'mesaj' => $yayin->get_error_message() );
	}
	$yayin_id = (string) ( $yayin['id'] ?? $olusturma_id );
	return array(
		'ok'        => true,
		'hedef_id'  => $yayin_id,
		'hedef_url' => 'https://www.threads.net/',
	);
}

function tilfy_threads_profil_dogrula() {
	if ( ! tilfy_threads_api_aktif_mi() ) {
		return new WP_Error( 'tilfy_threads', 'Threads baglantisi eksik' );
	}
	$kullanici_id = tilfy_ayar_al( 'threads_kullanici_id' );
	return tilfy_threads_graph_istek(
		$kullanici_id,
		array( 'fields' => 'id,username,name' )
	);
}

function tilfy_threads_medya_tip_cevir( $media_type ) {
	$t = strtoupper( sanitize_text_field( (string) $media_type ) );
	if ( $t === 'IMAGE' ) {
		return 'image';
	}
	if ( $t === 'VIDEO' ) {
		return 'video';
	}
	if ( $t === 'CAROUSEL_ALBUM' ) {
		return 'carousel_album';
	}
	if ( $t === 'TEXT' ) {
		return 'text';
	}
	return strtolower( $t !== '' ? $t : 'text' );
}

function tilfy_threads_kaynak_url_olustur( $oge ) {
	if ( ! is_array( $oge ) ) {
		return '';
	}
	$permalink = esc_url_raw( (string) ( $oge['permalink'] ?? '' ) );
	if ( $permalink !== '' ) {
		return $permalink;
	}
	$shortcode = sanitize_text_field( (string) ( $oge['shortcode'] ?? '' ) );
	$username  = sanitize_text_field( (string) ( $oge['username'] ?? '' ) );
	if ( $shortcode !== '' && $username !== '' ) {
		return 'https://www.threads.net/@' . rawurlencode( $username ) . '/post/' . rawurlencode( $shortcode );
	}
	$id = sanitize_text_field( (string) ( $oge['id'] ?? '' ) );
	if ( $id !== '' ) {
		return 'https://www.threads.net/t/' . rawurlencode( $id );
	}
	return '';
}

function tilfy_threads_icerikleri_cek() {
	@set_time_limit( 300 );
	if ( ! tilfy_threads_api_aktif_mi() ) {
		return array( 'ok' => false, 'mesaj' => 'Threads baglantisi eksik' );
	}
	$kullanici_id = tilfy_ayar_al( 'threads_kullanici_id' );
	$adet         = 0;
	$after        = '';
	do {
		$args = array(
			'fields' => 'id,text,media_type,media_url,thumbnail_url,permalink,timestamp,shortcode,username',
			'limit'  => 50,
		);
		if ( $after !== '' ) {
			$args['after'] = $after;
		}
		$veri = tilfy_threads_graph_istek( $kullanici_id . '/threads', $args );
		if ( is_wp_error( $veri ) ) {
			if ( $adet > 0 ) {
				return array( 'ok' => true, 'adet' => $adet, 'mesaj' => $adet . ' Threads icerigi cekildi (kismi)' );
			}
			return array( 'ok' => false, 'mesaj' => $veri->get_error_message() );
		}
		foreach ( (array) ( $veri['data'] ?? array() ) as $oge ) {
			$medya_tipi = tilfy_threads_medya_tip_cevir( $oge['media_type'] ?? 'text' );
			if ( function_exists( 'tilfy_senkron_medya_uygun_mu' ) && ! tilfy_senkron_medya_uygun_mu( $medya_tipi ) ) {
				continue;
			}
			$medya_url = (string) ( $oge['media_url'] ?? '' );
			if ( $medya_url === '' && ! empty( $oge['thumbnail_url'] ) ) {
				$medya_url = (string) $oge['thumbnail_url'];
			}
			tilfy_icerik_upsert(
				array(
					'kaynak_platform' => 'threads',
					'kaynak_id'       => (string) ( $oge['id'] ?? '' ),
					'aciklama'        => (string) ( $oge['text'] ?? '' ),
					'medya_tipi'      => $medya_tipi,
					'medya_url'       => $medya_url,
					'kapak_url'       => (string) ( $oge['thumbnail_url'] ?? '' ),
					'kaynak_url'      => tilfy_threads_kaynak_url_olustur( $oge ),
					'kaynak_tarihi'   => (string) ( $oge['timestamp'] ?? '' ),
					'durum'           => 'senkron',
				)
			);
			++$adet;
		}
		$after    = (string) ( $veri['paging']['cursors']['after'] ?? '' );
		$has_next = ! empty( $veri['paging']['next'] );
	} while ( $has_next && $after !== '' );
	return array( 'ok' => true, 'adet' => $adet, 'mesaj' => $adet . ' Threads icerigi cekildi' );
}
