package com.example.myapplication;

// Veritabanı işlemleri için gerekli Android kütüphaneleri
import android.content.ContentValues; // Veritabanına eklenecek veriyi taşıyan kap (anahtar-değer çifti)
import android.content.Context;       // Uygulamanın bağlamını (context) temsil eder, veritabanına erişmek için lazım
import android.database.Cursor;       // SQL sorgusundan dönen sonuçları satır satır okumak için kullanılır
import android.database.sqlite.SQLiteDatabase;     // SQLite veritabanı nesnesini temsil eder (okuma/yazma işlemleri)
import android.database.sqlite.SQLiteOpenHelper;   // Veritabanını oluşturmayı ve güncellemeyi yöneten yardımcı sınıf

/**
 * DatabaseHelper — Uygulamanın tüm veritabanı işlemlerini yöneten sınıf.
 * SQLiteOpenHelper'dan türetilmiş olduğu için veritabanını otomatik oluşturur ve yönetir.
 */
public class DatabaseHelper extends SQLiteOpenHelper {

    /**
     * Constructor (Yapıcı metot) — Bu sınıftan nesne oluşturulurken çalışır.
     * super(...) ile üst sınıfa şunları söylüyoruz:
     *   - "YemekRehberi.db" adında bir SQLite dosyası kullan
     *   - Versiyon numarası 1
     * Eğer bu dosya yoksa Android otomatik olarak oluşturur.
     */
    public DatabaseHelper(Context context) {
        super(context, "YemekRehberi.db", null, 1);
    }

    /**
     * onCreate — Veritabanı ilk kez oluşturulduğunda (uygulama ilk çalıştırıldığında) bir kez çalışır.
     * Burada tablomuzu oluşturuyoruz:
     *   id       → Her tarifin benzersiz numarası (otomatik artar: 1, 2, 3...)
     *   ad       → Yemeğin adı (metin)
     *   malzeme  → Malzeme listesi (metin)
     *   yapilis  → Nasıl yapıldığı (metin)
     *   favori   → Favoride mi değil mi? (0 = hayır, 1 = evet, varsayılan 0)
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE tarifler (id INTEGER PRIMARY KEY AUTOINCREMENT, ad TEXT, malzeme TEXT, yapilis TEXT, favori INTEGER DEFAULT 0)");
    }

    /**
     * onUpgrade — Uygulama güncellenip veritabanı versiyonu değiştiğinde çalışır.
     * Burada eski tabloyu silip yeniden oluşturuyoruz.
     * (Gerçek uygulamada veri kaybını önlemek için daha dikkatli bir güncelleme yapılır)
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS tarifler"); // Eski tabloyu sil
        onCreate(db);                                 // Yeni tabloyu oluştur
    }

    /**
     * kaydet() — Yeni bir tarif veritabanına ekler.
     * ContentValues ile SQL sütunlarına hangi veriyi yazacağımızı belirliyoruz,
     * sonra db.insert() ile "tarifler" tablosuna ekliyoruz.
     *
     * @param ad  → Yemeğin adı
     * @param mal → Malzemeler
     * @param yap → Yapılış tarifi
     */
    public void kaydet(String ad, String mal, String yap) {
        SQLiteDatabase db = this.getWritableDatabase(); // Yazma modunda veritabanını aç
        ContentValues v = new ContentValues();           // Eklenecek veriyi hazırla
        v.put("ad", ad);                                 // "ad" sütununa yemeğin adını yaz
        v.put("malzeme", mal);                           // "malzeme" sütununa malzemeleri yaz
        v.put("yapilis", yap);                           // "yapilis" sütununa tarifi yaz
        db.insert("tarifler", null, v);                  // "tarifler" tablosuna ekle
    }

    /**
     * tumVeriler() — Veritabanındaki TÜM tarifleri döndürür.
     * SELECT * FROM tarifler → Tablodaki her satırı getir.
     * Cursor nesnesi ile sonuçlar satır satır okunabilir.
     */
    public Cursor tumVeriler() {
        SQLiteDatabase db = this.getReadableDatabase(); // Sadece okuma modunda aç
        return db.rawQuery("SELECT * FROM tarifler", null);
    }

    /**
     * favorileriGetir() — Sadece favori işaretli tarifleri döndürür.
     * WHERE favori = 1 → Sadece favoriye eklenmiş olanları filtrele.
     */
    public Cursor favorileriGetir() {
        SQLiteDatabase db = this.getReadableDatabase();
        return db.rawQuery("SELECT * FROM tarifler WHERE favori = 1", null);
    }

    /**
     * favoriGuncelle() — Bir tarifin favori durumunu değiştirir.
     * UPDATE tarifler SET favori = ? WHERE ad = ?
     * Yani: "Adı verilen tarifte favori sütununu güncelle."
     *
     * @param ad    → Hangi tarifin favorisi değişecek
     * @param durum → 1 = favoriye ekle, 0 = favoriden çıkar
     */
    public void favoriGuncelle(String ad, int durum) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues v = new ContentValues();
        v.put("favori", durum);                             // Yeni favori durumunu hazırla
        db.update("tarifler", v, "ad=?", new String[]{ad}); // Adı eşleşen satırı güncelle
    }
}