from flask import render_template, request, flash, redirect, url_for
from flask_login import login_required, current_user
from app.quran import quran_bp
from app.auth.decorators import role_required
from app.services.quran_service import (
    get_chapters, get_verses, get_verse_by_key,
    get_juzs, get_translations
)


@quran_bp.route('/')
@login_required
@role_required('admin', 'guru', 'murid')
def index():
    """Default Quran reading page - shows surah list."""
    try:
        chapters = get_chapters(language='id')
    except Exception as e:
        flash(f'Gagal memuat data Al-Quran: {str(e)}', 'error')
        chapters = []
    return render_template('quran/index.html', chapters=chapters)


from app.models import HukumBacaan, User, KelasMurid, School, VerseNote
from flask import g

@quran_bp.route('/surah/<int:surah_number>')
@login_required
@role_required('admin', 'guru', 'murid')
def read_surah(surah_number):
    """Read a specific surah with verses."""
    page = request.args.get('page', 1, type=int)
    per_page = 15

    murid_list = []
    hukum_list = []
    note_highlights = {}
    if current_user.is_guru:
        # Get all students in this school
        murid_list = User.query.filter_by(school_id=g.school_id, role='murid').order_by(User.name).all()
        hukum_list = HukumBacaan.query.filter_by(school_id=g.school_id).order_by(HukumBacaan.name).all()

    try:
        chapters = get_chapters(language='id')
        surah_data = None
        for ch in chapters:
            if ch.get('id') == surah_number:
                surah_data = ch
                break

        if not surah_data:
            flash(f'Surah {surah_number} tidak ditemukan.', 'error')
            return redirect(url_for('quran.index'))

        verses_data = get_verses(surah_number, page=page, per_page=per_page)
        verses = verses_data.get('verses', [])
        pagination = verses_data.get('pagination', {})
        verse_keys = [verse.get('verse_key') for verse in verses if verse.get('verse_key')]

        if verse_keys:
            if current_user.is_murid:
                notes = VerseNote.query.filter(
                    VerseNote.verse_key.in_(verse_keys),
                    VerseNote.hukum_bacaan_id.isnot(None),
                    ((VerseNote.user_id == current_user.id) | (VerseNote.murid_id == current_user.id))
                ).all()
            else:
                notes = VerseNote.query.filter(
                    VerseNote.verse_key.in_(verse_keys),
                    VerseNote.hukum_bacaan_id.isnot(None),
                    VerseNote.user_id == current_user.id
                ).all()

            for note in notes:
                if note.word_position is not None and note.hukum_bacaan:
                    note_highlights[f'{note.verse_key}:{note.word_position}'] = {
                        'name': note.hukum_bacaan.name,
                        'color': note.hukum_bacaan.color,
                    }

    except Exception as e:
        flash(f'Gagal memuat surah: {str(e)}', 'error')
        return redirect(url_for('quran.index'))

    return render_template(
        'quran/read_surah.html',
        surah=surah_data,
        verses=verses,
        pagination=pagination,
        surah_number=surah_number,
        chapters=chapters,
        murid_list=murid_list,
        hukum_list=hukum_list,
        note_highlights=note_highlights
    )


@quran_bp.route('/juz')
@login_required
@role_required('admin', 'guru', 'murid')
def juz_list():
    """List all juz."""
    try:
        juzs = get_juzs()
    except Exception as e:
        flash(f'Gagal memuat data juz: {str(e)}', 'error')
        juzs = []
    return render_template('quran/juz_list.html', juzs=juzs)


@quran_bp.route('/tafsir')
@login_required
@role_required('admin', 'guru', 'murid')
def tafsir():
    """Tafsir page - placeholder for future tafsir integration."""
    return render_template('quran/tafsir.html')
