
# ================================================================
# ROUTE ADMIN DATABASE - KELOLA TAGIHAN SANTRI
# ================================================================

@app.route('/admin_database/tagihan', methods=['GET', 'POST'])
@login_required(role='admin_database')
def admin_tagihan():
    koneksi_db = ambil_koneksi()
    cursor = koneksi_db.cursor(dictionary=True)
    
    if request.method == 'POST':
        # Admin tambah tagihan manual
        id_santri = request.form.get('id_santri')
        jenis_tagihan = request.form.get('jenis_tagihan')
        nominal = request.form.get('nominal')
        keterangan = request.form.get('keterangan')
        
        try:
            cursor.execute("""
                INSERT INTO tagihan_santri (id_santri, jenis_tagihan, keterangan, nominal, tipe) 
                VALUES (%s, %s, %s, %s, 'manual')
            """, (id_santri, jenis_tagihan, keterangan, nominal))
            koneksi_db.commit()
            flash('Tagihan berhasil ditambahkan!', 'success')
        except Exception as e:
            flash(f'Gagal menambahkan tagihan: {e}', 'danger')
            
        return redirect('/admin_database/tagihan')
        
    # GET: Ambil daftar tagihan
    cursor.execute("""
        SELECT t.*, d.nama_lengkap 
        FROM tagihan_santri t
        JOIN databasemaster d ON t.id_santri = d.id_santri
        ORDER BY t.tanggal_tagihan DESC
    """)
    tagihan_list = cursor.fetchall()
    
    # Ambil daftar santri untuk dropdown tambah tagihan
    cursor.execute("SELECT id_santri, nama_lengkap FROM databasemaster ORDER BY nama_lengkap ASC")
    santri_list = cursor.fetchall()
    
    cursor.close()
    koneksi_db.close()
    
    return render_template('admin_database/tagihan.html', tagihan_list=tagihan_list, santri_list=santri_list)

@app.route('/admin_database/tagihan/bayar', methods=['POST'])
@login_required(role='admin_database')
def admin_tagihan_bayar():
    id_tagihan = request.form.get('id_tagihan')
    nominal_bayar = float(request.form.get('nominal_bayar', 0))
    
    koneksi_db = ambil_koneksi()
    cursor = koneksi_db.cursor(dictionary=True)
    
    try:
        # Cek tagihan saat ini
        cursor.execute("SELECT * FROM tagihan_santri WHERE id = %s", (id_tagihan,))
        tagihan = cursor.fetchone()
        
        if tagihan:
            total_dibayar_sekarang = float(tagihan['jumlah_dibayar']) + nominal_bayar
            nominal_tagihan = float(tagihan['nominal'])
            
            status_baru = 'belum'
            tanggal_lunas = None
            
            if total_dibayar_sekarang >= nominal_tagihan:
                status_baru = 'lunas'
                tanggal_lunas = datetime.now().date()
            elif total_dibayar_sekarang > 0:
                status_baru = 'sebagian'
                
            cursor.execute("""
                UPDATE tagihan_santri 
                SET jumlah_dibayar = %s, status = %s, tanggal_lunas = %s
                WHERE id = %s
            """, (total_dibayar_sekarang, status_baru, tanggal_lunas, id_tagihan))
            
            koneksi_db.commit()
            flash('Pembayaran berhasil dicatat!', 'success')
            
    except Exception as e:
        flash(f'Gagal memproses pembayaran: {e}', 'danger')
    finally:
        cursor.close()
        koneksi_db.close()
        
    return redirect('/admin_database/tagihan')

@app.route('/admin_database/tagihan/hapus/<id>', methods=['GET'])
@login_required(role='admin_database')
def admin_tagihan_hapus(id):
    koneksi_db = ambil_koneksi()
    cursor = koneksi_db.cursor()
    try:
        cursor.execute("DELETE FROM tagihan_santri WHERE id = %s", (id,))
        koneksi_db.commit()
        flash('Tagihan berhasil dihapus.', 'success')
    except Exception as e:
        flash(f'Gagal menghapus tagihan: {e}', 'danger')
    finally:
        cursor.close()
        koneksi_db.close()
    return redirect('/admin_database/tagihan')

