package com.example.myapplication;

import android.content.Intent;
import android.database.Cursor;    // Veritabanı sorgu sonuçlarını okumak için
import android.os.Bundle;
import android.view.View;          // Ekrandaki her UI elemanının temel sınıfı
import android.view.ViewGroup;     // Birden fazla View'ı içinde barındıran kap (örn: LinearLayout)
import android.widget.BaseAdapter; // ListView için özel adaptör yazarken türetilen temel sınıf
import android.widget.Button;
import android.widget.ListView;    // Verileri dikey liste halinde gösteren bileşen
import android.widget.TextView;   // Metin gösterme bileşeni
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;        // Dinamik büyüyebilen dizi listesi

/**
 * MainActivity3 — "Kayıtlı Tarifler" ekranı.
 * Veritabanındaki TÜM tarifleri liste halinde gösterir.
 * Her kart üzerinde:
 *   - Yemek adı görünür
 *   - ❤️ butonuyla favoriye eklenebilir
 *   - Karta tıklanınca MainActivity4 (detay) açılır
 */
public class MainActivity3 extends AppCompatActivity {

    ListView listView;      // Tariflerin listeleneceği ListView bileşeni
    DatabaseHelper db;      // Veritabanı işlemleri için yardımcı nesne

    // Veritabanından okunan veriler bu listelerde tutulur (index'ler birbiriyle eşleşir)
    ArrayList<String> adlar = new ArrayList<>();  // Yemek adları listesi
    ArrayList<String> mallar = new ArrayList<>(); // Malzemeler listesi
    ArrayList<String> yaplar = new ArrayList<>(); // Yapılış listesi

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3); // activity_main3.xml tasarımını yükle

        // XML'deki ListView'ı Java'ya bağla
        listView = findViewById(R.id.listview1);

        // Veritabanı nesnesini oluştur
        db = new DatabaseHelper(this);

        // Veritabanındaki tarifleri yükle ve listeyi doldur
        verileriYukle();
    }

    /**
     * verileriYukle() — Veritabanından tüm tarifleri okur ve listeleri doldurur.
     * Her çağrıda önce listeleri temizler (clear), sonra tekrar doldurur.
     * Bu sayede yeni eklenen tarifler de görünür.
     */
    private void verileriYukle() {
        // Önceki verileri temizle (sayfayı yenileme amacıyla)
        adlar.clear();
        mallar.clear();
        yaplar.clear();

        // Veritabanından tüm tarifleri çek (Cursor = sonuç tablosu)
        Cursor c = db.tumVeriler();

        if (c != null) {
            // Cursor'ı satır satır ilerlet
            while (c.moveToNext()) {
                adlar.add(c.getString(1));  // 2. sütun (index 1) = "ad"
                mallar.add(c.getString(2)); // 3. sütun (index 2) = "malzeme"
                yaplar.add(c.getString(3)); // 4. sütun (index 3) = "yapilis"
            }
            c.close(); // Cursor'ı kapat — bellek sızıntısını önler
        }

        // Özel adaptörü ListView'a bağla (her satır için list_item_layout.xml kullanılır)
        listView.setAdapter(new CustomAdapter());
    }

    /**
     * CustomAdapter — ListView'ın her satırını nasıl göstereceğini belirleyen iç sınıf.
     * BaseAdapter'dan türetilmiş, her tarif için list_item_layout.xml tasarımını kullanır.
     */
    class CustomAdapter extends BaseAdapter {

        // Listede kaç eleman olduğunu söyler (ListView bu sayıyı kullanır)
        @Override public int getCount() { return adlar.size(); }

        // Belirli bir pozisyondaki nesneyi döndürür (burada kullanmıyoruz)
        @Override public Object getItem(int i) { return null; }

        // Her elemanın benzersiz ID'si (burada kullanmıyoruz)
        @Override public long getItemId(int i) { return 0; }

        /**
         * getView() — Her liste satırının görünümünü oluşturur ve döndürür.
         * ListView bu metodu her satır için tekrar tekrar çağırır.
         *
         * @param position    → Hangi sıradaki eleman gösteriliyor (0'dan başlar)
         * @param convertView → Daha önce oluşturulmuş ve geri dönüştürülmüş view (performans için)
         * @param parent      → ListView'ın kendisi
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // Eğer geri dönüştürülecek view yoksa yenisini XML'den şişir (inflate)
            if (convertView == null) {
                // list_item_layout.xml → her satırın CardView tasarımı
                convertView = getLayoutInflater().inflate(R.layout.list_item_layout, null);
            }

            // XML'deki bileşenleri bu satır'ın view'una bağla
            TextView txtAd = convertView.findViewById(R.id.txtYemekAdi);  // Yemek adı yazısı
            Button btnFav  = convertView.findViewById(R.id.btnFavoriEkle); // ❤️ butonu

            // Bu sıradaki yemek adını TextView'a yaz
            txtAd.setText(adlar.get(position));

            // ── FAVORİ BUTONU ──────────────────────────────────────────────
            btnFav.setOnClickListener(v -> {
                // Bu tarifin favori durumunu 1 (favoride) olarak güncelle
                db.favoriGuncelle(adlar.get(position), 1);

                // Kullanıcıya bildirim göster
                Toast.makeText(MainActivity3.this,
                    adlar.get(position) + " favorilere eklendi! ❤️",
                    Toast.LENGTH_SHORT).show();
            });

            // ── KART TIKLANINCA (SATIR TIKLANINCA) ─────────────────────────
            convertView.setOnClickListener(v -> {
                // Detay sayfasına (MainActivity4) git
                Intent intent = new Intent(MainActivity3.this, MainActivity4.class);

                // putExtra: bir sonraki Activity'ye veri gönder (anahtar-değer)
                intent.putExtra("pAd",  adlar.get(position));  // Tarif adını gönder
                intent.putExtra("pMal", mallar.get(position)); // Malzemeleri gönder
                intent.putExtra("pYap", yaplar.get(position)); // Yapılışı gönder

                startActivity(intent); // Detay sayfasını aç
            });

            return convertView; // Hazırlanan satır görünümünü ListView'a teslim et
        }
    }
}