from flask import Blueprint, request, redirect, session, flash, render_template, jsonify
import sqlite3
from database import DB_NAME

kader_bp = Blueprint('kader', __name__)

@kader_bp.route('/form_kader')
def form_kader():
    if not session.get('logged_in'):
        return redirect('/login')
        
    # Ambil data dapur dinamis dari database (nama_dapur, desa, alamat)
    conn = sqlite3.connect(DB_NAME)
    c = conn.cursor()
    try:
        c.execute("SELECT nama_dapur, desa_kelurahan, alamat_lengkap FROM dapur_sppg ORDER BY nama_dapur ASC")
        data_dapur_db = c.fetchall()
    except sqlite3.OperationalError:
        data_dapur_db = []
    finally:
        conn.close()
        
    return render_template('kader.html', data_dapur_db=data_dapur_db)


@kader_bp.route('/tambah_sasaran_lengkap', methods=['POST'])
def tambah_sasaran_lengkap():
    bulan_lapor = request.form.get('bulan_lapor')
    tahun_lapor = request.form.get('tahun_lapor')
    nama_dapur = request.form.get('nama_dapur')
    desa_kelurahan = request.form.get('desa_kelurahan')
    alamat_dapur = request.form.get('alamat_dapur')
    kategori_penerima = request.form.get('kategori_Sasaran') 
    nama_penerima = request.form.get('nama_Sasaran') 
    nama_ayah = request.form.get('nama_ayah')
    nik_penerima = request.form.get('nik_Sasaran')
    kk_penerima = request.form.get('kk_Sasaran')
    
    tempat_lahir = request.form.get('tempat_lahir', '')
    tanggal_lahir = request.form.get('tanggal_lahir', '')
    ttl_penerima = f"{tempat_lahir}, {tanggal_lahir}" if tempat_lahir or tanggal_lahir else ""
    
    # Field Tambahan Anak
    nik_anak = request.form.get('nik_anak', '')
    nama_anak = request.form.get('nama_anak', '')
    tempat_lahir_anak = request.form.get('tempat_lahir_anak', '')
    tanggal_lahir_anak = request.form.get('tanggal_lahir_anak', '')
    usia_anak = request.form.get('usia_anak', '')

    desa_sasaran = request.form.get('desa_sasaran')
    alamat_sasaran = request.form.get('alamat_sasaran')
    wilayah_posyandu = request.form.get('wilayah_posyandu')
    usia_sasaran = request.form.get('usia_sasaran')
    hamil_ke = request.form.get('hamil_ke') or 0
    usia_kehamilan = request.form.get('usia_kehamilan') or 0
    anak_ke = request.form.get('anak_ke') or 0
    berat_badan = request.form.get('berat_badan') or 0.0
    tinggi_badan = request.form.get('tinggi_badan') or 0.0
    jenis_kontrasepsi = request.form.get('jenis_kontrasepsi')
    input_oleh = session.get('nama_lengkap')

    conn = sqlite3.connect(DB_NAME)
    c = conn.cursor()
    c.execute('''INSERT INTO sasaran_lengkap 
                 (bulan_lapor, tahun_lapor, nama_dapur, desa_kelurahan, alamat_dapur, kategori_penerima, nama_penerima, nama_ayah,
                 nik_penerima, kk_penerima, ttl_penerima, desa_sasaran, alamat_sasaran, wilayah_posyandu, usia_sasaran, 
                 hamil_ke, usia_kehamilan, anak_ke, berat_badan, tinggi_badan, 
                 jenis_kontrasepsi, input_oleh, tempat_lahir, tanggal_lahir, nama_anak, tempat_lahir_anak, tanggal_lahir_anak, usia_anak, nik_anak) 
                 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
              (bulan_lapor, tahun_lapor, nama_dapur, desa_kelurahan, alamat_dapur, kategori_penerima, nama_penerima, nama_ayah,
               nik_penerima, kk_penerima, ttl_penerima, desa_sasaran, alamat_sasaran, wilayah_posyandu, usia_sasaran,
               hamil_ke, usia_kehamilan, anak_ke, berat_badan, tinggi_badan,
               jenis_kontrasepsi, input_oleh, tempat_lahir, tanggal_lahir, nama_anak, tempat_lahir_anak, tanggal_lahir_anak, usia_anak, nik_anak))
                 
    conn.commit()
    conn.close()
    flash('Data Sasaran Lengkap (BNBA) berhasil disimpan!', 'success')
    return redirect('/rekapitulasi')

@kader_bp.route('/hapus_sasaran/<int:id>')
def hapus_sasaran(id):
    if not session.get('logged_in'):
        return redirect('/login')
        
    conn = sqlite3.connect(DB_NAME)
    c = conn.cursor()
    c.execute("DELETE FROM sasaran_lengkap WHERE id=?", (id,))
    conn.commit()
    conn.close()
    
    flash('Data sasaran berhasil dihapus!', 'success')
    return redirect('/rekapitulasi')

@kader_bp.route('/lihat_sasaran/<int:id>')
def lihat_sasaran(id):
    if not session.get('logged_in'):
        return redirect('/login')
        
    conn = sqlite3.connect(DB_NAME)
    conn.row_factory = sqlite3.Row  
    c = conn.cursor()
    c.execute("SELECT * FROM sasaran_lengkap WHERE id=?", (id,))
    data_sasaran = c.fetchone()
    conn.close()
    
    return render_template('lihat_sasaran.html', data=data_sasaran)

@kader_bp.route('/edit_sasaran/<int:id>')
def edit_sasaran(id):
    if not session.get('logged_in'):
        return jsonify({'error': 'Sesi berakhir, silakan login kembali'}), 401
        
    conn = sqlite3.connect(DB_NAME)
    conn.row_factory = sqlite3.Row
    c = conn.cursor()
    c.execute("SELECT * FROM sasaran_lengkap WHERE id=?", (id,))
    data_sasaran = c.fetchone()
    conn.close()
    
    if data_sasaran:
        return jsonify(dict(data_sasaran))
    return jsonify({'error': 'Data tidak ditemukan'}), 404

@kader_bp.route('/update_sasaran/<int:id>', methods=['POST'])
def update_sasaran(id):
    if not session.get('logged_in'):
        return redirect('/login')

    bulan_lapor = request.form.get('bulan_lapor')
    tahun_lapor = request.form.get('tahun_lapor')
    nama_dapur = request.form.get('nama_dapur')
    desa_kelurahan = request.form.get('desa_kelurahan')
    alamat_dapur = request.form.get('alamat_dapur')
    kategori_penerima = request.form.get('kategori_Sasaran') 
    nama_penerima = request.form.get('nama_Sasaran') 
    nama_ayah = request.form.get('nama_ayah')
    nik_penerima = request.form.get('nik_Sasaran')
    kk_penerima = request.form.get('kk_Sasaran')
    
    tempat_lahir = request.form.get('tempat_lahir', '')
    tanggal_lahir = request.form.get('tanggal_lahir', '')
    ttl_penerima = f"{tempat_lahir}, {tanggal_lahir}" if tempat_lahir or tanggal_lahir else ""

    # Field Tambahan Anak
    nik_anak = request.form.get('nik_anak', '')
    nama_anak = request.form.get('nama_anak', '')
    tempat_lahir_anak = request.form.get('tempat_lahir_anak', '')
    tanggal_lahir_anak = request.form.get('tanggal_lahir_anak', '')
    usia_anak = request.form.get('usia_anak', '')

    desa_sasaran = request.form.get('desa_sasaran')
    alamat_sasaran = request.form.get('alamat_sasaran')
    wilayah_posyandu = request.form.get('wilayah_posyandu')
    usia_sasaran = request.form.get('usia_sasaran')
    hamil_ke = request.form.get('hamil_ke') or 0
    usia_kehamilan = request.form.get('usia_kehamilan') or 0
    anak_ke = request.form.get('anak_ke') or 0
    berat_badan = request.form.get('berat_badan') or 0.0
    tinggi_badan = request.form.get('tinggi_badan') or 0.0
    jenis_kontrasepsi = request.form.get('jenis_kontrasepsi')

    conn = sqlite3.connect(DB_NAME)
    c = conn.cursor()
    c.execute('''UPDATE sasaran_lengkap SET 
                 bulan_lapor=?, tahun_lapor=?, nama_dapur=?, desa_kelurahan=?, alamat_dapur=?, 
                 kategori_penerima=?, nama_penerima=?, nama_ayah=?, nik_penerima=?, kk_penerima=?, 
                 ttl_penerima=?, desa_sasaran=?, alamat_sasaran=?, wilayah_posyandu=?, usia_sasaran=?, 
                 hamil_ke=?, usia_kehamilan=?, anak_ke=?, berat_badan=?, tinggi_badan=?, jenis_kontrasepsi=?,
                 tempat_lahir=?, tanggal_lahir=?, nama_anak=?, tempat_lahir_anak=?, tanggal_lahir_anak=?, usia_anak=?, nik_anak=?
                 WHERE id=?''',
              (bulan_lapor, tahun_lapor, nama_dapur, desa_kelurahan, alamat_dapur, 
               kategori_penerima, nama_penerima, nama_ayah, nik_penerima, kk_penerima, 
               ttl_penerima, desa_sasaran, alamat_sasaran, wilayah_posyandu, usia_sasaran,
               hamil_ke, usia_kehamilan, anak_ke, berat_badan, tinggi_badan, jenis_kontrasepsi,
               tempat_lahir, tanggal_lahir, nama_anak, tempat_lahir_anak, tanggal_lahir_anak, usia_anak, nik_anak, id))
                 
    conn.commit()
    conn.close()
    flash('Data Sasaran berhasil diupdate!', 'success')
    return redirect('/rekapitulasi')