<?php // phpcs:ignoreFile -- Self-hosted updater, excluded from WordPress.org distribution
/**
 * Self-hosted plugin updater.
 *
 * Only loaded when BOOSTBOT_SELF_HOSTED is defined and true.
 * NOT loaded when the plugin is installed from WordPress.org.
 *
 * @package BoostBot
 * @since   1.4.3
 */

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

/**
 * Class BoostBot_Plugin_Updater
 *
 * Handles self-hosted update checks, plugin info modal, and auto-update control.
 *
 * @since 1.4.3
 */
class BoostBot_Plugin_Updater {

	/**
	 * Register update hooks.
	 *
	 * These run unconditionally (not behind is_admin()) because WP cron
	 * and WP-CLI need them to check for and install updates automatically.
	 */
	public function __construct() {
		add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_plugin_update' ) );
		add_filter( 'plugins_api', array( $this, 'plugin_update_info' ), 10, 3 );
		add_filter( 'auto_update_plugin', array( $this, 'control_auto_update' ), 10, 2 );
	}

	/**
	 * Check for plugin updates from self-hosted server.
	 *
	 * Hooks into WordPress update transient to show BoostBot updates
	 * in the standard WordPress Plugins > Updates screen.
	 *
	 * @param object $transient The update_plugins transient value.
	 * @return object Modified transient.
	 */
	public function check_plugin_update( $transient ) {
		if ( empty( $transient->checked ) ) {
			return $transient;
		}

		$version_url = 'https://boostbot.boostmedia.co.il/downloads/boostbot/version.json';
		$remote      = get_transient( 'boostbot_update_remote_data' );

		if ( false === $remote ) {
			$response = wp_remote_get( $version_url, array(
				'timeout' => 10,
				'headers' => array( 'Accept' => 'application/json' ),
			) );

			if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
				return $transient;
			}

			$remote = json_decode( wp_remote_retrieve_body( $response ) );
			if ( ! $remote || ! isset( $remote->version ) ) {
				return $transient;
			}

			set_transient( 'boostbot_update_remote_data', $remote, 6 * HOUR_IN_SECONDS );
		}

		$plugin_basename = BOOSTBOT_PLUGIN_BASENAME;
		$current_version = BOOSTBOT_VERSION;

		if ( version_compare( $remote->version, $current_version, '>' ) ) {
			$transient->response[ $plugin_basename ] = (object) array(
				'slug'         => 'boostbot',
				'plugin'       => $plugin_basename,
				'new_version'  => $remote->version,
				'url'          => isset( $remote->homepage ) ? $remote->homepage : 'https://boostbot.boostmedia.co.il/BoostBot/',
				'package'      => isset( $remote->download_url ) ? $remote->download_url : '',
				'tested'       => isset( $remote->tested_wp_version ) ? $remote->tested_wp_version : '',
				'requires'     => isset( $remote->min_wp_version ) ? $remote->min_wp_version : '6.0',
				'requires_php' => isset( $remote->min_php_version ) ? $remote->min_php_version : '8.0',
			);
		} else {
			$transient->no_update[ $plugin_basename ] = (object) array(
				'slug'        => 'boostbot',
				'plugin'      => $plugin_basename,
				'new_version' => $remote->version,
				'url'         => isset( $remote->homepage ) ? $remote->homepage : 'https://boostbot.boostmedia.co.il/BoostBot/',
				'package'     => isset( $remote->download_url ) ? $remote->download_url : '',
			);
		}

		return $transient;
	}

	/**
	 * Provide plugin information for the WordPress plugins API modal.
	 *
	 * @param false|object|array $result The result object or array.
	 * @param string             $action The type of information being requested.
	 * @param object             $args   Plugin API arguments.
	 * @return false|object
	 */
	public function plugin_update_info( $result, $action, $args ) {
		if ( $action !== 'plugin_information' || ! isset( $args->slug ) || $args->slug !== 'boostbot' ) {
			return $result;
		}

		$remote = get_transient( 'boostbot_update_remote_data' );
		if ( ! $remote ) {
			return $result;
		}

		$info = new \stdClass();
		$info->name          = 'BoostBot';
		$info->slug          = 'boostbot';
		$info->version       = $remote->version;
		$info->author        = '<a href="https://boostmedia.co.il">Boost Media</a>';
		$info->homepage      = isset( $remote->homepage ) ? $remote->homepage : 'https://boostbot.boostmedia.co.il/BoostBot/';
		$info->download_link = isset( $remote->download_url ) ? $remote->download_url : '';
		$info->tested        = isset( $remote->tested_wp_version ) ? $remote->tested_wp_version : '';
		$info->requires      = isset( $remote->min_wp_version ) ? $remote->min_wp_version : '6.0';
		$info->requires_php  = isset( $remote->min_php_version ) ? $remote->min_php_version : '8.0';
		$info->last_updated  = isset( $remote->release_date ) ? $remote->release_date : '';

		$sections = array();

		if ( isset( $remote->changelog ) ) {
			$sections['changelog'] = $remote->changelog;
		}

		$sections['terms_of_service'] = $this->get_terms_of_service_html();
		$sections['privacy_policy']   = $this->get_privacy_policy_html();

		$info->sections = $sections;

		return $info;
	}

	/**
	 * Control automatic updates for this plugin.
	 *
	 * When the boostbot_auto_update option is disabled (false),
	 * WordPress will NOT auto-update this plugin in the background.
	 *
	 * @param bool|null $update Whether to auto-update.
	 * @param object    $item   The plugin update object.
	 * @return bool|null
	 */
	public function control_auto_update( $update, $item ) {
		if ( isset( $item->plugin ) && $item->plugin === BOOSTBOT_PLUGIN_BASENAME ) {
			return ( get_option( 'boostbot_auto_update', 'yes' ) === 'yes' );
		}
		return $update;
	}

	/**
	 * HTML content for the Terms of Service tab in the plugin info popup.
	 *
	 * @return string
	 */
	private function get_terms_of_service_html() {
		return '
<div dir="rtl" style="font-family:system-ui,sans-serif;line-height:1.7;color:#1F2937;">
<p><strong>עדכון אחרון:</strong> פברואר 2026</p>

<h3>1. הסכמה לתנאים</h3>
<p>בהתקנה ושימוש בתוסף BoostBot ("התוסף"), אתה מסכים לתנאי שימוש אלה. אם אינך מסכים לתנאים, אנא אל תתקין או תשתמש בתוסף.</p>

<h3>2. תיאור השירות</h3>
<p>BoostBot הוא תוסף WordPress המספק צ׳אטבוט מבוסס בינה מלאכותית לאתרי אינטרנט. התוסף מאפשר:</p>
<ul>
    <li>צ׳אט אוטומטי עם מבקרי האתר באמצעות מודלי AI מתקדמים (Gemini, GPT)</li>
    <li>מערכת RAG (Retrieval-Augmented Generation) — אינדוקס תוכן האתר למאגר ידע חכם</li>
    <li>איסוף לידים באמצעות ווידג׳טים מובנים (טפסים, יומנים, וואטסאפ)</li>
    <li>אנליטיקס מתקדם של שיחות ולידים</li>
    <li>התאמה אישית מלאה של עיצוב ואישיות הבוט</li>
    <li>אינטגרציה עם WooCommerce</li>
</ul>

<h3>3. תמחור — BoostCoin</h3>
<p>השימוש בתוסף ב-AI מתבסס על מערכת קרדיטים בשם <strong>BoostCoin</strong>:</p>
<ul>
    <li>BoostCoin משמשים להפעלת שיחות AI, אינדוקס מאגר ידע ושירותי AI נוספים</li>
    <li>ניתן לרכוש BoostCoin כחבילה חד-פעמית או כמנוי חודשי</li>
    <li>התשלום מתבצע באמצעות PayPal (כרטיס אשראי או חשבון PayPal)</li>
    <li>המחירים מוצגים בשקלים חדשים (₪) ועשויים להתעדכן מעת לעת</li>
</ul>

<h3>4. ביטול מנוי והחזרים</h3>
<ul>
    <li>ניתן לבטל מנוי חודשי בכל עת דרך עמוד ההגדרות</li>
    <li>לאחר ביטול, BoostCoin שנותרו ימשיכו לשמש אתכם עד לגמירתם</li>
    <li>החזרים כספיים עבור רכישות חד-פעמיות ייבחנו לפי מקרה — החזר מלא יביא להשבתת האתר עד לרכישה חדשה</li>
</ul>

<h3>5. שימוש מותר</h3>
<p>אתה מתחייב:</p>
<ul>
    <li>להשתמש בתוסף בהתאם לחוק</li>
    <li>לא להשתמש בתוסף להפצת תוכן פוגעני, בלתי חוקי או מטעה</li>
    <li>לא לנסות לפרוץ או לעקוף את מנגנוני האבטחה</li>
    <li>לא להעתיק, לשנות או להפיץ את קוד התוסף (למעט כמותר ברישיון GPL)</li>
</ul>

<h3>6. רישיון</h3>
<p>התוסף מופץ תחת רישיון GPL v2 או מאוחר יותר. ניתן להשתמש, לשנות ולהפיץ בהתאם לתנאי הרישיון.</p>
<p>פרטים: <a href="https://www.gnu.org/licenses/gpl-2.0.html" target="_blank">GNU GPL v2</a></p>

<h3>7. הגבלת אחריות</h3>
<p>התוסף מסופק "כמות שהוא" (AS IS) ללא אחריות מכל סוג. בשום מקרה לא נהיה אחראים לנזק ישיר, עקיף, מקרי או תוצאתי הנובע מ:</p>
<ul>
    <li>השימוש או חוסר היכולת להשתמש בתוסף</li>
    <li>תשובות שגויות או מטעות של הצ׳אטבוט</li>
    <li>אובדן נתונים או לידים</li>
    <li>הפסקות שירות</li>
    <li>פעולות צד שלישי (ספקי AI, PayPal)</li>
</ul>
<p>סך האחריות שלנו מוגבל לסכום ששולם עבור BoostCoin ב-12 החודשים האחרונים.</p>

<h3>8. שינויים בשירות</h3>
<p>אנו שומרים לעצמנו את הזכות לשנות או להפסיק פיצ׳רים, לעדכן מחירים (עם הודעה מראש), ולשנות תנאים אלה. שינויים מהותיים יפורסמו בעדכון התוסף.</p>

<h3>9. דין וסמכות שיפוט</h3>
<p>תנאים אלה כפופים לחוקי מדינת ישראל. כל מחלוקת תידון בבתי המשפט המוסמכים בישראל.</p>

<h3>10. יצירת קשר</h3>
<ul>
    <li><strong>חברה:</strong> בוסט מדיה בע״מ</li>
    <li><strong>אימייל:</strong> <a href="mailto:ofer@boost-media.co.il">ofer@boost-media.co.il</a></li>
    <li><strong>טלפון:</strong> 054-2307739 (עפר שקרון)</li>
    <li><strong>אתר:</strong> <a href="https://boostmedia.co.il">boostmedia.co.il</a></li>
</ul>

<p><em>בהמשך שימושך בתוסף, אתה מאשר שקראת, הבנת והסכמת לתנאי שימוש אלה.</em></p>
</div>';
	}

	/**
	 * HTML content for the Privacy Policy tab in the plugin info popup.
	 *
	 * @return string
	 */
	private function get_privacy_policy_html() {
		return '
<div dir="rtl" style="font-family:system-ui,sans-serif;line-height:1.7;color:#1F2937;">
<p><strong>עדכון אחרון:</strong> פברואר 2026</p>

<h3>1. מבוא</h3>
<p>בוסט מדיה בע״מ ("החברה", "אנחנו") מכבדת את פרטיותך ומחויבת להגן על המידע האישי שלך. מדיניות פרטיות זו מסבירה כיצד אנו אוספים, משתמשים ומגנים על מידע בעת השימוש בתוסף BoostBot ("התוסף").</p>

<h3>2. מידע שאנו אוספים</h3>

<h4>2.1 מידע שאנו לא אוספים</h4>
<p>התוסף <strong>אינו אוסף</strong> באופן אוטומטי מידע אישי על המשתמשים או על מבקרי האתר שלך. שיחות הצ׳אטבוט נשמרות <strong>באתר שלך בלבד</strong> ואינן מועברות לשרתים שלנו.</p>

<h4>2.2 מידע שנאסף בעת שליחת משוב</h4>
<p>כאשר אתה שולח לנו משוב או דיווח על תקלה, אנו עשויים לאסוף:</p>
<ul>
    <li>כתובת האימייל שלך</li>
    <li>כתובת האתר שלך</li>
    <li>תיאור הבעיה או המשוב</li>
    <li>צילום מסך (אם הועלה על ידך)</li>
    <li>לוגים טכניים לצורך איתור תקלות</li>
    <li>גרסת התוסף וסביבת העבודה</li>
</ul>

<h4>2.3 מידע שנאסף דרך התוסף</h4>
<p>כאשר התוסף מותקן ופעיל, הוא עשוי לאסוף (ולשמור באתר שלך):</p>
<ul>
    <li>שיחות צ׳אט בין מבקרי האתר לצ׳אטבוט</li>
    <li>פרטי לידים שהוזנו דרך ווידג׳טים (טפסים, יומנים)</li>
    <li>נתוני שימוש ואנליטיקס של הצ׳אטבוט</li>
    <li>תוכן האתר שנאסף למאגר הידע (פוסטים, עמודים, מוצרים)</li>
</ul>
<p><strong>חשוב:</strong> המידע שנאסף דרך התוסף שייך לבעל האתר (הלקוח). החברה אינה ניגשת למידע זה, אלא אם נדרש תמיכה טכנית באישור מפורש של הלקוח.</p>

<h3>3. שימוש במידע</h3>
<p>מידע שנאסף במסגרת משוב משמש אותנו אך ורק למטרות:</p>
<ul>
    <li>מתן תמיכה טכנית ופתרון תקלות</li>
    <li>שיפור התוסף</li>
    <li>יצירת קשר חזרה בנוגע לפנייתך</li>
</ul>

<h3>4. שירותים חיצוניים</h3>

<h4>4.1 שירותי AI</h4>
<p>התוסף משתמש בשירותי AI חיצוניים לצורך יצירת תגובות הצ׳אטבוט ואינדוקס תוכן:</p>
<ul>
    <li><strong>Google Gemini:</strong> אורקסטרציה וניתוח כוונת משתמש</li>
    <li><strong>OpenAI GPT:</strong> הפקת תשובות בשיחה</li>
</ul>
<p>הודעות המשתמש נשלחות לספקי AI לעיבוד ומוחזרות כתשובה. השימוש כפוף למדיניות הפרטיות של כל ספק.</p>

<h4>4.2 PayPal</h4>
<p>עבור רכישת BoostCoin, אנו משתמשים בשירותי PayPal:</p>
<ul>
    <li>עיבוד התשלום מתבצע ישירות מול PayPal</li>
    <li>איננו שומרים פרטי כרטיס אשראי</li>
    <li>השימוש כפוף ל<a href="https://www.paypal.com/privacy" target="_blank">מדיניות הפרטיות של PayPal</a></li>
</ul>

<h3>5. אחסון מידע ואבטחה</h3>
<ul>
    <li>שיחות צ׳אט ולידים — מאוחסנים באתר הוורדפרס שלך בלבד</li>
    <li>עיבוד AI — מתבצע בשרתים מאובטחים (Hetzner, גרמניה) עם הצפנה בתנועה (TLS)</li>
    <li>מפתחות API ואסימונים — מוצפנים ב-SHA-256</li>
    <li>גישה למערכות הניהול — מוגבלת לצוות מורשה בלבד</li>
</ul>

<h3>6. שמירת מידע</h3>
<ul>
    <li><strong>שיחות צ׳אט:</strong> נשמרות בהתאם להגדרות בעל האתר (ברירת מחדל: 90 יום)</li>
    <li><strong>נתוני תשלום:</strong> נשמרים על ידי PayPal בהתאם למדיניותם</li>
    <li><strong>משוב ותמיכה:</strong> נשמרים למשך הזמן הנדרש לטיפול, לאחר מכן נמחקים</li>
</ul>

<h3>7. זכויותיך</h3>
<p>בהתאם לחוק הגנת הפרטיות ו-GDPR:</p>
<ul>
    <li><strong>זכות גישה:</strong> לבקש עותק של המידע שלך</li>
    <li><strong>זכות תיקון:</strong> לבקש תיקון מידע שגוי</li>
    <li><strong>זכות מחיקה:</strong> לבקש מחיקת המידע שלך</li>
    <li><strong>זכות התנגדות:</strong> להתנגד לעיבוד המידע</li>
</ul>
<p>למימוש זכויותיך: <a href="mailto:ofer@boost-media.co.il">ofer@boost-media.co.il</a></p>

<h3>8. עוגיות (Cookies)</h3>
<p>התוסף עשוי להשתמש בעוגיות לצורך:</p>
<ul>
    <li>זיהוי מבקרים חוזרים בצ׳אט</li>
    <li>ניהול סשן ושמירת העדפות</li>
</ul>
<p>העוגיות נשמרות באתר שלך בלבד ואינן משותפות איתנו.</p>

<h3>9. שינויים במדיניות</h3>
<p>אנו עשויים לעדכן מדיניות זו מעת לעת. שינויים מהותיים יפורסמו בעדכון התוסף.</p>

<h3>10. יצירת קשר</h3>
<ul>
    <li><strong>חברה:</strong> בוסט מדיה בע״מ</li>
    <li><strong>אימייל:</strong> <a href="mailto:ofer@boost-media.co.il">ofer@boost-media.co.il</a></li>
    <li><strong>טלפון:</strong> 054-2307739 (עפר שקרון)</li>
    <li><strong>אתר:</strong> <a href="https://boostmedia.co.il">boostmedia.co.il</a></li>
</ul>
</div>';
	}
}
