=== altinapps — Has Altın Otomatik Fiyatlama ===
Contributors: altinapps
Tags: woocommerce, altın, kuyumcu, fiyatlama, gold
Requires at least: 6.0
Requires PHP: 7.4
WC requires at least: 7.0
WC tested up to: 9.4
Stable tag: 1.6.0
License: GPLv2 or later

WooCommerce altın ürünlerini anlık has altın fiyatına göre otomatik fiyatlar.

== Açıklama ==

altinapps eklentisi, WooCommerce mağazanızdaki altın ürünlerinin satış
fiyatını anlık has altın spot fiyatına göre otomatik hesaplar:

  ürün fiyatı = (has altın fiyatı × ürünün has gramajı) + kâr

Kâr üç şekilde tanımlanabilir: sabit TL, yüzde veya gram has altın.

Veri kaynağı: altinapps API. Lisans anahtarı gerekir —
altinapps panelinden alınır.

== Kurulum ==

1. Eklentiyi WordPress yönetiminden yükleyin ve etkinleştirin.
2. WooCommerce > altinapps Fiyatlama sayfasına gidin.
3. Lisans anahtarınızı girin (Free / Pro / Kurumsal).
4. Her altın ürününün düzenleme ekranında "Otomatik fiyatla"yı işaretleyin,
   has gramajı ve kâr kuralını girin.
5. Fiyatlar, paketinizin tazelik aralığında otomatik güncellenir.

== Notlar ==

* Senkron, WordPress zamanlayıcısı (WP-Cron) ile çalışır. Düşük trafikli
  sitelerde gecikebilir; gerçek bir sistem cron'u önerilir.
* `DISABLE_WP_CRON` tanımlıysa otomatik senkron çalışmaz; aşağıdaki "Sistem
  cron'u ile çalıştırma" bölümüne bakın.
* Piyasa verisi durursa (`market_status = stale`) fiyatlar dondurulur —
  yanlış fiyatla satış önlenir.
* `WC HPOS (Custom Order Tables)` ile uyumludur (eklenti sipariş katmanına
  dokunmaz).
* Basit ve **varyasyonlu** (variable) ürünler desteklenir (14/18/22/24 ayar
  varyasyonları otomatik fiyatlanır; v1.3.0+).

== Sistem cron'u ile çalıştırma ==

`wp-config.php` içinde `define('DISABLE_WP_CRON', true);` varsa WordPress
kendi zamanlayıcısını çalıştırmaz. Bu durumda sunucu cron'unuza ekleyin:

    */1 * * * * curl -fsS https://siteniz.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Bu giriş dakikada bir wp-cron.php'yi tetikler; altinapps planlı senkronu da
bu çağrılarla çalışır.

== Geliştirici hook'ları ==

Aşağıdaki filter/action'lar ile davranışı genişletebilirsiniz:

* `apply_filters('altinapps_computed_price', float $price, array $ctx)`
  Hesaplanan ürün fiyatını override eder. `$ctx` = ['gold','gramaj','kar_tip','kar'].
  Geçersiz dönüş (≤0 ya da sayısal değil) yutulur, varsayılan değer kullanılır.

* `apply_filters('altinapps_apply_price_args', array $args, WC_Product $product, float $price)`
  Hangi WC fiyat alanlarına ne yazılacağını belirler. Varsayılan:
  `['regular' => '...', 'sale' => '']`. Tutarsız `sale` (≥ regular ya da
  negatif) sessizce temizlenir.

* `apply_filters('altinapps_product_query_args', array $args)`
  Otomatik fiyatlanacak ürünleri bulan `wc_get_products()` argümanlarını
  özelleştirir (ör. belirli bir kategori filtresi eklemek için).

* `apply_filters('altinapps_api_request_args', array $args, string $url)`
  altinapps API'sine yapılan `wp_remote_get()` çağrısının argümanlarını
  özelleştirir. `sslverify=true` ve `Authorization` başlığı her koşulda
  zorlanır — bu güvenlik kontrolleri filtreden geçemez.

* `do_action('altinapps_after_sync', array|null $body, string $error)`
  Her senkron sonunda tetiklenir. `$body` API yanıtı (hata ise null);
  `$error` boş string ya da hata mesajı.

* `do_action('altinapps_after_apply', WC_Product $product, float $regular, string $sale)`
  Bir ürünün fiyatı güncellendikten sonra tetiklenir.

* `do_action('altinapps_api_response', int $http_code, mixed $body, string $url)`
  API yanıtını gözlemler (logging/teşhis için).

== Geliştirici sabitleri (opsiyonel) ==

Aşağıdaki PHP sabitleri `wp-config.php` içinde tanımlanırsa varsayılanları
override eder; normal kullanıcı arayüzünde görünmezler.

* `ALTINAPPS_API_BASE` — alternatif API uç noktası (örn. staging için).
  Yalnız `https://` URL'leri kabul edilir; geçersiz değer yutulur.
* `ALTINAPPS_PRODUCT_CODE` — alternatif ürün kodu (varsayılan `woo-gold`).
  `sanitize_key` ile temizlenir.

== Sürüm Geçmişi ==

= 1.6.0 =
* **API alan adları `alis`/`satis` olarak güncellendi** (data-api ile tam uyum).
  Fiyat okuma, fiyat kaynağı seçimi (alış/satış) ve fiyat geçmişi buna göre
  yenilendi.

= 1.5.4 =
* **Yeni admin sayfası: altinapps → Nasıl çalışır** — fiyat formülleri, kâr
  kuralı hiyerarşisi, senkron mekaniği ve veritabanı yazma stratejisi şeffaf
  bir şekilde anlatılır (mevcut ayar özeti dahil).

= 1.5.3 =
* `kâr=0` ürün artık kategori varsayılanını tetiklemez — kullanıcının "burada
  kâr yok" niyeti korunur.
* Stale-data sticky uyarısı: backend 60+ dakikadır erişilemiyorsa wp-admin'de
  uyarı görünür (yanlış fiyatla satış riski).
* Tek seferlik temizlik: v1.5.0 öncesi `Array` string'i / serialized array
  olarak yazılmış kar_deger/gramaj meta'ları otomatik silinir.

= 1.5.2 =
* Büyük katalog ölçeklenmesi: 500+ ürünlü mağazada senkron Action Scheduler
  ile 500'lük background job'lara bölünür — PHP timeout + WP-Cron overlap riski
  ortadan kalkar (10k+ mağazada dakikalık senkron mümkün).
* Overlap koruması + snapshot tutarlılığı (tüm chunk'lar aynı spot fiyatı kullanır).

= 1.5.1 =
* CSV export bug fix — dosya artık WP admin HTML chrome olmadan temiz CSV indirir
  (admin_init hook'una taşındı).
* Variable ürün parent satırında `kar_deger` "Array" olarak yazılıyordu — POST
  array geldiğinde skaler normalize edilir.

= 1.5.0 =
* **Lisans hatası uyarısı (global)**: API 401/403 dönüyorsa tüm wp-admin
  sayfalarında kırmızı sticky notice gösterilir — admin saatlerce farkına
  varmadan satışı yanlış fiyatla devam etmesin diye.
* **"Lisansı test et" butonu**: altinapps > Ayarlar sayfasında, kaydetmeden
  anahtarın geçerliliğini ve sunucu erişimini doğrular (1 istek tüketir).
* **Pro feature lock görseli**: Free pakette altinapps dashboard'unda Pro
  özellikleri (dakikalık tazelik, varyasyon, kategori-kâr, toplu işlem,
  fiyat geçmişi) 🔒 ikonuyla listelenir — somut yükseltme değer önerisi.
* Sürüm bump: 1.4.0 → 1.5.0; backend plugin-update endpoint otomatik
  bildirim gönderir, mevcut Pro/Kurumsal kurulumlar 12 saat içinde alır.

= 1.4.0 =
* **Toplu işlem (Pro+)**: WooCommerce > Ürünler listesinde yeni bulk action'lar
  ("altinapps Otomatik fiyatlamayı aç/kapa") ve yeni **Toplu işlem** sayfası
  ile **CSV içe/dışa aktarım**. 500 ürünlü mağazada toplu has gramaj + kâr
  güncellemesi tek dosya yüklemeyle. CSV format: id, sku, name, type, parent_id,
  gramaj, kar_tip, kar_deger. Variation satırları parent_id ile bağlı.
* **Fiyat değişim geçmişi (Pro+)**: Her senkronda eski/yeni fiyat ve o anki
  has altın bid/ask değeri özel bir tabloda saklanır
  (`wp_altinapps_price_history`). Yeni **Fiyat geçmişi** admin sayfasında ürün
  filtresi + son 200 kayıt tablosu. Saklama: Pro 30 gün, Kurumsal 12 ay; daily
  WP-Cron ile otomatik temizlik. Free paketinde insert yapılmaz (storage tasarrufu).
* Free kullanıcısı yeni iki menüyü görür ama içerik kilitli ("Pro'ya geç"
  uyarısı). Pro/Kurumsal lisansı doğrulanınca otomatik açılır
  (`Altinapps_Settings::is_pro()` ile gating).

= 1.3.0 =
* **Varyasyon ürün desteği**: WooCommerce variable ürünleri (14/18/22/24 ayar
  bilezik gibi varyasyonlar) artık otomatik fiyatlanır. Parent üründe
  varsayılan kâr kuralı + opsiyonel varsayılan gramaj; her varyasyon kendi
  has gramajını girer ve isterse kâr kuralını override eder.
* **Kategori-bazlı varsayılan kâr (Pro+)**: WooCommerce kategorileri için
  varsayılan kâr tipi/değeri tanımlanır. Ürün veya varyasyon kendi kâr meta'sı
  girmemişse otomatik kategoriden çekilir — 500 ürünlü mağazada kurulum
  süresini ciddi azaltır. Free paketinde sayfa görünür ama girdi alanları
  kilitlidir; Pro/Kurumsal'a geçince aktifleşir.
* **Otomatik uzaktan güncelleme**: artık WordPress Eklentiler ekranında "yeni
  sürüm mevcut" bildirimi çıkar, tek tıkla güncellenir (`uninstall.php`
  çalışmaz, ayarlar/lisans/ürün meta'ları korunur). WP 12 saatte bir
  altinapps API'sine check eder; bizim tarafta yeni sürüm yayınlandığında
  tüm müşteriler birkaç saat içinde bildirim alır. Update herkese açık —
  güvenlik fix'leri Free dahil herkese yayılır.
* `Altinapps_Settings::is_pro()` helper'ı eklendi (server-side
  effective_package üzerinden gating).
* sync.php'de yeni hook noktası: `Altinapps_Sync::apply_variation($variation_id, $gold)`.
* sync.php apply_all artık `'type' => ['simple', 'variable']` ile her iki ürün
  tipini de kapsar; variable parent fiyatı `WC_Product_Variable::sync()` ile
  yeniden hesaplanır.

= 1.2.0 =
* **Top-level menü**: eklenti artık WP yan menüsünde WooCommerce'in hemen
  altında kendi ana menüsünde ("altinapps") yer alır. Alt sayfalar:
  "Plan & Durum" (yeni, varsayılan) ve "Ayarlar".
* **Plan & Durum dashboard'ı**: aktif paketinizi (Free / Pro / Kurumsal)
  renkli rozet ile gösterir; tazelik, son senkron, güncel has altın ve
  piyasa durumu 4'lü istatistik gridinde. Reverse-trial sırasında
  "Pro" rozeti otomatik görünür (sunucudan gelen `effective_package`).
* **Yükselt CTA**: Free pakette aktifken "Pro'ya geçin — ₺1.490 / ay"
  bandı ve "Planları gör" düğmesi (https://altinapps.com/#fiyatlar).
* **Onboarding banner**: lisans girilmemişse Plan & Durum sayfasının
  üstünde ayarlar sayfasına yönlendiren uyarı.
* Sürekli görünür alt bilgi (eklenti adı + sürüm + veri kaynağı).
* Senkron sonrası `effective_package` plugin state'ine kaydedilir;
  yalnız bilinen değerler ('free','pro','kurumsal') kabul edilir (A05).

= 1.1.0 =
* HPOS (Custom Order Tables) uyumluluk beyanı eklendi — WC ≥7.1 admin uyarısı
  artık çıkmaz.
* Ayar yüzü sadeleştirildi: "API adresi" ve "Ürün kodu" alanları kaldırıldı —
  uç nokta sabit (`https://api.altinapps.com`). Geliştirici/test için
  `ALTINAPPS_API_BASE` ve `ALTINAPPS_PRODUCT_CODE` `wp-config.php` sabitleri
  ile override edilebilir.
* Sale_price davranışı netleşti: otomatik fiyat uygulanırken `sale_price`
  bilinçli olarak temizlenir; entegratörler `altinapps_apply_price_args`
  filtresiyle özelleştirebilir. Tutarsız `sale ≥ regular` durumu engellenir.
* Geliştirici hook'ları eklendi: `altinapps_computed_price`,
  `altinapps_apply_price_args`, `altinapps_product_query_args`,
  `altinapps_api_request_args`, `altinapps_after_sync`,
  `altinapps_after_apply`, `altinapps_api_response`. Filtre çıktıları
  güvenlik için yeniden doğrulanır (OWASP A04).
* `DISABLE_WP_CRON` tanımlıysa eklenti ayar sayfasında uyarı gösterilir;
  sistem cron rehberi readme'ye eklendi.
* WooCommerce vergi ayarına (KDV dahil/hariç) göre bilgilendirme notu —
  altın özel istisnası için "Vergi sınıfı" yönlendirmesi.
* i18n: `languages/altinapps-gold.pot` çeviri şablonu eklendi; `Domain Path`
  ve `load_plugin_textdomain` ile yerelleştirme altyapısı kuruldu.
* API istemcisinde `sslverify=true` zorlanır (filtre kapatamaz) ve
  `Authorization` başlığı her zaman lisansla doldurulur (A07).

= 1.0.0 =
* İlk sürüm: lisanslı API ile otomatik fiyatlama, has gramaj + kâr kuralı,
  WP-Cron senkron, piyasa durumu (live/closed/stale) yönetimi.
