from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.contrib import messages
from django.utils import timezone
from django.views.decorators.http import require_POST

from bengkel.models import (
    Bengkel, Jemputan, Kehadiran, PenganjurRequest, UserProfile,
    BengkelContribution, ContributionFile,
    SpafPainPoint, SpafProblemStatement,
    BlueprintTheme, BlueprintPillar, BlueprintStrategy, 
    BlueprintActionPlan, BlueprintIndicator, BlueprintAllocation
)
from problems.models import SystemFeedback


def _pending_count():
    return PenganjurRequest.objects.filter(status="pending").count()


@login_required
def dashboard(request):
    if not request.user.is_superuser:
        return redirect("home")

    now = timezone.now()
    stats = {
        "total_bengkel":    Bengkel.objects.count(),
        "bengkel_aktif":    Bengkel.objects.filter(tarikh__gte=now).count(),
        "total_penganjur":  User.objects.filter(is_staff=True, is_superuser=False).count(),
        "total_peserta":    User.objects.filter(is_staff=False, is_superuser=False).count(),
        "total_jemputan":   Jemputan.objects.count(),
        "total_hadir":      Kehadiran.objects.count(),
        "total_pernyataan": SystemFeedback.objects.count(),
    }
    bengkels_terkini = (
        Bengkel.objects
        .select_related("created_by")
        .prefetch_related("jemputan")
        .order_by("-created_at")[:10]
    )
    return render(request, "superadmin/dashboard.html", {
        "stats": stats,
        "bengkels_terkini": bengkels_terkini,
        "pending_permohonan": _pending_count(),
    })


@login_required
def semua_bengkel(request):
    if not request.user.is_superuser:
        return redirect("home")
    bengkels = (
        Bengkel.objects
        .select_related("created_by")
        .prefetch_related("jemputan")
        .order_by("-created_at")
    )
    return render(request, "superadmin/semua_bengkel.html", {
        "bengkels": bengkels,
        "today": timezone.now(),
        "pending_permohonan": _pending_count(),
    })


@login_required
def semua_pengguna(request):
    if not request.user.is_superuser:
        return redirect("home")
    pengguna = User.objects.filter(is_superuser=False).order_by("date_joined")
    return render(request, "superadmin/semua_pengguna.html", {
        "pengguna": pengguna,
        "pending_permohonan": _pending_count(),
    })


@login_required
@require_POST
def toggle_penganjur(request, uid):
    """Promote peserta → penganjur or demote penganjur → peserta."""
    if not request.user.is_superuser:
        return redirect("home")
    user = get_object_or_404(User, pk=uid, is_superuser=False)
    user.is_staff = not user.is_staff
    user.save()
    role = "Penganjur" if user.is_staff else "Peserta"
    messages.success(request, f"{user.username} kini ditetapkan sebagai {role}.")
    return redirect("superadmin:semua_pengguna")


@login_required
def tambah_penganjur(request):
    """Superadmin creates a new penganjur account."""
    import re as _re
    if not request.user.is_superuser:
        return redirect("home")

    if request.method == "POST":
        username   = request.POST.get("username", "").strip()
        email      = request.POST.get("email", "").strip()
        first_name = request.POST.get("first_name", "").strip()
        last_name  = request.POST.get("last_name", "").strip()
        organisasi = request.POST.get("organisasi", "").strip()
        jabatan    = request.POST.get("jabatan", "").strip()
        telefon    = request.POST.get("telefon", "").strip()
        pw1        = request.POST.get("password1", "")
        pw2        = request.POST.get("password2", "")
        form_data  = {
            "username": username, "email": email,
            "first_name": first_name, "last_name": last_name,
            "organisasi": organisasi, "jabatan": jabatan, "telefon": telefon,
        }

        def _err(msg):
            return render(request, "superadmin/tambah_penganjur.html", {"error": msg, "form_data": form_data, "pending_permohonan": _pending_count()})

        if not username or len(username) < 3:
            return _err("Nama pengguna mesti sekurang-kurangnya 3 aksara.")
        if not _re.match(r'^[\w]+$', username):
            return _err("Nama pengguna hanya boleh mengandungi huruf, nombor, dan garis bawah (_).")
        if User.objects.filter(username=username).exists():
            return _err("Nama pengguna ini sudah digunakan.")
        if not email or not _re.match(r'^[^\s@]+@[^\s@]+\.[^\s@]+$', email):
            return _err("Sila masukkan alamat e-mel yang sah.")
        if User.objects.filter(email=email).exists():
            return _err("E-mel ini sudah berdaftar.")
        if not organisasi:
            return _err("Nama organisasi wajib diisi.")
        if len(pw1) < 8:
            return _err("Kata laluan mesti sekurang-kurangnya 8 aksara.")
        if pw1 != pw2:
            return _err("Kata laluan tidak sepadan.")

        user = User.objects.create_user(
            username=username, email=email, password=pw1,
            first_name=first_name, last_name=last_name,
            is_staff=True,
        )
        # Guna get_or_create untuk mengelakkan ralat IntegrityError jika signal auto-cipta profil
        profile, created = UserProfile.objects.get_or_create(user=user)
        profile.organisasi = organisasi
        profile.jabatan = jabatan
        profile.telefon = telefon
        profile.save()
        messages.success(request, f'Akaun penganjur "{username}" berjaya dicipta.')
        return redirect("superadmin:semua_pengguna")

    return render(request, "superadmin/tambah_penganjur.html", {"pending_permohonan": _pending_count()})


@login_required
def semua_pernyataan(request):
    if not request.user.is_superuser:
        return redirect("home")
    
    # Tukar kepada SystemFeedback dan perbaiki select_related
    pernyataan = (
        SystemFeedback.objects
        .select_related("submitted_by")
        .order_by("-created_at")
    )
    return render(request, "superadmin/semua_pernyataan.html", {
        "pernyataan_list": pernyataan, # Tukar nama variable ke pernyataan_list untuk padan dengan HTML baru
        "pending_permohonan": _pending_count(),
    })


@login_required
def permohonan_penganjur(request):
    """Superadmin — list all penganjur requests."""
    if not request.user.is_superuser:
        return redirect("home")
    permohonan = PenganjurRequest.objects.select_related("user").order_by("-created_at")
    return render(request, "superadmin/permohonan_penganjur.html", {
        "permohonan_list": permohonan,  # <--- KITA TUKAR NAMA PEMBOLEHUBAH DI SINI
        "pending_permohonan": _pending_count(),
    })


@login_required
@require_POST
def lulus_permohonan(request, pid):
    """Superadmin approves a penganjur request — keeps existing password and notifies via email."""
    from django.core.mail import EmailMultiAlternatives
    from django.conf import settings as _settings

    if not request.user.is_superuser:
        return redirect("home")
    req = get_object_or_404(PenganjurRequest, pk=pid)

    # Ubah status HANYA (Tanpa generate password baru)
    req.status = "approved"
    req.catatan_admin = request.POST.get("catatan_admin", "").strip()
    req.temp_password = ""  # Kosongkan kerana tidak lagi relevan
    req.save()

    # Aktifkan peranan penganjur
    req.user.is_active = True
    req.user.is_staff = True
    req.user.save()

    # Send approval email
    subject = "Permohonan Penganjur Anda Telah Diluluskan — NDHB"
    login_url = request.build_absolute_uri("/login/")
    text_body = (
        f"Assalamualaikum / Salam Sejahtera,\n\n"
        f"Permohonan anda untuk menjadi Penganjur dalam Sistem Pengurusan Bengkel NDHB telah DILULUSKAN.\n\n"
        f"Anda kini boleh log masuk menggunakan Nama Pengguna dan Kata Laluan yang telah anda daftarkan sebelum ini.\n\n"
        f"Nama Pengguna : {req.user.username}\n\n"
        f"Sila log masuk di: {login_url}\n\n"
        f"Terima kasih.\n"
        f"Pasukan NDHB"
    )
    html_body = f"""
    <div style="font-family:Inter,Arial,sans-serif;max-width:560px;margin:auto;background:#0f172a;
                color:#e2e8f0;padding:36px 40px;border-radius:16px;">
      <h2 style="color:#2dd4bf;margin-top:0;">Permohonan Diluluskan ✅</h2>
      <p>Assalamualaikum / Salam Sejahtera,</p>
      <p>Permohonan anda untuk menjadi <strong>Penganjur</strong> dalam Sistem Pengurusan Bengkel NDHB
         telah <span style="color:#4ade80;font-weight:600;">DILULUSKAN</span>.</p>
      <p>Anda kini boleh log masuk menggunakan <strong>Kata Laluan yang telah anda tetapkan semasa pendaftaran.</strong></p>
      <div style="background:#1e293b;border-radius:10px;padding:20px 24px;margin:24px 0;
                  border-left:4px solid #2dd4bf;">
        <p style="margin:0 0 8px;font-weight:600;color:#94a3b8;font-size:12px;text-transform:uppercase;
                  letter-spacing:.08em;">Maklumat Akaun</p>
        <table style="width:100%;border-collapse:collapse;font-size:14px;">
          <tr><td style="padding:6px 0;color:#94a3b8;width:140px;">Nama Pengguna</td>
              <td style="padding:6px 0;font-family:monospace;font-size:15px;color:#f1f5f9;font-weight:700;">
                {req.user.username}</td></tr>
        </table>
      </div>
      <a href="{login_url}"
         style="display:inline-block;background:#2dd4bf;color:#0f172a;text-decoration:none;
                font-weight:700;padding:12px 28px;border-radius:10px;font-size:14px;">
        Log Masuk Sekarang
      </a>
      <hr style="border:none;border-top:1px solid #1e293b;margin:28px 0;">
      <p style="font-size:12px;color:#475569;margin:0;">Sistem Pengurusan Bengkel · NDHB</p>
    </div>
    """
    try:
        msg = EmailMultiAlternatives(
            subject=subject,
            body=text_body,
            from_email=getattr(_settings, "DEFAULT_FROM_EMAIL", "noreply@ndhb.my"),
            to=[req.user.email],
        )
        msg.attach_alternative(html_body, "text/html")
        msg.send()
        messages.success(
            request,
            f"Permohonan {req.user.username} telah diluluskan. E-mel makluman dihantar ke {req.user.email}.",
        )
    except Exception:
        messages.warning(
            request,
            f"Permohonan {req.user.username} diluluskan, TETAPI e-mel GAGAL dihantar "
            f"(semak tetapan SMTP)."
        )

    return redirect("superadmin:permohonan_penganjur")


@login_required
@require_POST
def tolak_permohonan(request, pid):
    """Superadmin rejects a penganjur request — notifies applicant by email."""
    import random, string
    from django.core.mail import EmailMultiAlternatives
    from django.conf import settings as _settings

    if not request.user.is_superuser:
        return redirect("home")
    req = get_object_or_404(PenganjurRequest, pk=pid)
    req.status = "rejected"
    req.catatan_admin = request.POST.get("catatan_admin", "").strip()
    req.save()

    # Send rejection email
    subject = "Permohonan Penganjur Anda Tidak Berjaya — NDHB"
    catatan = req.catatan_admin or "Tiada catatan tambahan."
    text_body = (
        f"Assalamualaikum / Salam Sejahtera,\n\n"
        f"Kami ingin memaklumkan bahawa permohonan anda untuk menjadi Penganjur "
        f"dalam Sistem Pengurusan Bengkel NDHB TIDAK BERJAYA pada masa ini.\n\n"
        f"Catatan daripada pentadbir:\n{catatan}\n\n"
        f"Untuk sebarang pertanyaan, sila hubungi pentadbir sistem.\n\n"
        f"Terima kasih.\nPasukan NDHB"
    )
    html_body = f"""
    <div style="font-family:Inter,Arial,sans-serif;max-width:560px;margin:auto;background:#0f172a;
                color:#e2e8f0;padding:36px 40px;border-radius:16px;">
      <h2 style="color:#f87171;margin-top:0;">Permohonan Tidak Berjaya &#10060;</h2>
      <p>Assalamualaikum / Salam Sejahtera,</p>
      <p>Kami ingin memaklumkan bahawa permohonan anda untuk menjadi <strong>Penganjur</strong>
         dalam Sistem Pengurusan Bengkel NDHB
         <span style="color:#f87171;font-weight:600;">TIDAK BERJAYA</span> pada masa ini.</p>
      <div style="background:#1e293b;border-radius:10px;padding:16px 20px;margin:20px 0;
                  border-left:4px solid #ef4444;">
        <p style="margin:0 0 6px;font-size:11px;font-weight:700;color:#94a3b8;
                  text-transform:uppercase;letter-spacing:.06em;">Catatan Pentadbir</p>
        <p style="margin:0;font-size:14px;color:#fca5a5;">{catatan}</p>
      </div>
      <p style="font-size:13px;color:#94a3b8;">
        Untuk sebarang pertanyaan lanjut, sila hubungi pentadbir sistem.
      </p>
      <hr style="border:none;border-top:1px solid #1e293b;margin:28px 0;">
      <p style="font-size:12px;color:#475569;margin:0;">Sistem Pengurusan Bengkel &middot; NDHB</p>
    </div>
    """
    try:
        msg = EmailMultiAlternatives(
            subject=subject,
            body=text_body,
            from_email=getattr(_settings, "DEFAULT_FROM_EMAIL", "noreply@ndhb.my"),
            to=[req.user.email],
        )
        msg.attach_alternative(html_body, "text/html")
        msg.send()
        messages.success(request, f"Permohonan {req.user.username} telah ditolak. E-mel notifikasi dihantar ke {req.user.email}.")
    except Exception:
        messages.warning(request, f"Permohonan {req.user.username} ditolak, TETAPI e-mel GAGAL dihantar (semak tetapan SMTP).")

    return redirect("superadmin:permohonan_penganjur")


# ── Edit & Delete Pengguna ────────────────────────────────────────────────────

@login_required
def edit_pengguna(request, uid):
    if not request.user.is_superuser:
        return redirect("home")
    import re as _re
    u = get_object_or_404(User, pk=uid, is_superuser=False)
    profile, _ = UserProfile.objects.get_or_create(user=u)

    if request.method == "POST":
        first_name = request.POST.get("first_name", "").strip()
        last_name  = request.POST.get("last_name", "").strip()
        email      = request.POST.get("email", "").strip()
        is_active  = request.POST.get("is_active") == "1"
        is_staff   = request.POST.get("is_staff") == "1"
        organisasi = request.POST.get("organisasi", "").strip()
        jabatan    = request.POST.get("jabatan", "").strip()
        telefon    = request.POST.get("telefon", "").strip()
        new_pw     = request.POST.get("new_password", "").strip()

        def _err(msg):
            return render(request, "superadmin/edit_pengguna.html", {
                "u": u, "profile": profile, "error": msg,
                "pending_permohonan": _pending_count(),
            })

        if not email or not _re.match(r'^[^\s@]+@[^\s@]+\.[^\s@]+$', email):
            return _err("Sila masukkan alamat e-mel yang sah.")
        if User.objects.filter(email=email).exclude(pk=uid).exists():
            return _err("E-mel ini sudah digunakan oleh pengguna lain.")
        if new_pw and len(new_pw) < 8:
            return _err("Kata laluan baharu mesti sekurang-kurangnya 8 aksara.")

        u.first_name = first_name
        u.last_name  = last_name
        u.email      = email
        u.is_active  = is_active
        u.is_staff   = is_staff
        if new_pw:
            u.set_password(new_pw)
        u.save()

        profile.organisasi = organisasi
        profile.jabatan    = jabatan
        profile.telefon    = telefon
        profile.save()

        messages.success(request, f'Akaun "{u.username}" berjaya dikemaskini.')
        return redirect("superadmin:semua_pengguna")

    return render(request, "superadmin/edit_pengguna.html", {
        "u": u, "profile": profile,
        "pending_permohonan": _pending_count(),
    })


@login_required
@require_POST
def delete_pengguna(request, uid):
    if not request.user.is_superuser:
        return redirect("home")
    u = get_object_or_404(User, pk=uid, is_superuser=False)
    username = u.username
    # Padam semua Jemputan berkaitan supaya rekod peserta turut hilang
    Jemputan.objects.filter(user=u).delete()
    u.delete()
    messages.success(request, f'Akaun "{username}" telah dipadam.')
    return redirect("superadmin:semua_pengguna")


# ── Edit & Delete Bengkel ─────────────────────────────────────────────────────

@login_required
def edit_bengkel(request, bid):
    if not request.user.is_superuser:
        return redirect("home")
    import datetime as _dt
    from django.utils import timezone as _tz
    b = get_object_or_404(Bengkel, pk=bid)

    if request.method == "POST":
        title             = request.POST.get("title", "").strip()
        description       = request.POST.get("description", "").strip()
        tarikh_str        = request.POST.get("tarikh", "").strip()
        tarikh_tamat_str  = request.POST.get("tarikh_tamat", "").strip()
        lokasi_nama       = request.POST.get("lokasi_nama", "").strip()
        lokasi_alamat     = request.POST.get("lokasi_alamat", "").strip()
        organizer_nama    = request.POST.get("organizer_nama", "").strip()
        organizer_email   = request.POST.get("organizer_email", "").strip()
        organizer_telefon = request.POST.get("organizer_telefon", "").strip()
        had_peserta       = request.POST.get("had_peserta", "0").strip()

        def _err(msg):
            return render(request, "superadmin/edit_bengkel.html", {
                "b": b, "error": msg,
                "pending_permohonan": _pending_count(),
            })

        if not title:
            return _err("Tajuk bengkel wajib diisi.")
        if not tarikh_str:
            return _err("Tarikh bengkel wajib diisi.")
        if not lokasi_nama:
            return _err("Nama lokasi wajib diisi.")

        try:
            tarikh = _tz.make_aware(_dt.datetime.fromisoformat(tarikh_str))
        except ValueError:
            return _err("Format tarikh tidak sah.")

        tarikh_tamat = None
        if tarikh_tamat_str:
            try:
                tarikh_tamat = _tz.make_aware(_dt.datetime.fromisoformat(tarikh_tamat_str))
            except ValueError:
                return _err("Format tarikh tamat tidak sah.")

        b.title             = title
        b.description       = description
        b.tarikh            = tarikh
        b.tarikh_tamat      = tarikh_tamat
        b.lokasi_nama       = lokasi_nama
        b.lokasi_alamat     = lokasi_alamat
        b.organizer_nama    = organizer_nama
        b.organizer_email   = organizer_email
        b.organizer_telefon = organizer_telefon
        b.had_peserta       = int(had_peserta) if had_peserta.isdigit() else 0
        b.save()

        messages.success(request, f'Bengkel "{b.title}" berjaya dikemaskini.')
        return redirect("superadmin:semua_bengkel")

    return render(request, "superadmin/edit_bengkel.html", {
        "b": b,
        "pending_permohonan": _pending_count(),
    })


@login_required
@require_POST
def delete_bengkel(request, bid):
    if not request.user.is_superuser:
        return redirect("home")
    b = get_object_or_404(Bengkel, pk=bid)
    title = b.title
    b.delete()
    messages.success(request, f'Bengkel "{title}" telah dipadam.')
    return redirect("superadmin:semua_bengkel")


@login_required
@require_POST
def delete_contribution_comment(request, cid):
    if not request.user.is_superuser:
        return redirect("home")
    from bengkel.models import BengkelContribution
    c = get_object_or_404(BengkelContribution, pk=cid)
    bid = c.bengkel_id
    line_idx = request.POST.get("line_idx")
    if line_idx is not None:
        lines = c.comment.splitlines()
        try:
            idx = int(line_idx)
            if 0 <= idx < len(lines):
                lines.pop(idx)
            c.comment = "\n".join(l for l in lines if l.strip())
        except (ValueError, IndexError):
            pass
    else:
        c.comment = ""
    c.save(update_fields=["comment"])
    messages.success(request, "Komen telah dipadam.")
    return redirect("superadmin:detail_bengkel", bid=bid)


def delete_contribution_file(request, fid):
    if not request.user.is_superuser:
        return redirect("home")
    import os
    cf = get_object_or_404(ContributionFile, pk=fid)
    bid = cf.contribution.bengkel_id
    try:
        if cf.file and os.path.isfile(cf.file.path):
            os.remove(cf.file.path)
    except Exception:
        pass
    cf.delete()
    messages.success(request, f'Fail "{cf.original_name}" telah dipadam.')
    return redirect("superadmin:detail_bengkel", bid=bid)


@login_required
@require_POST
def delete_blueprint_theme(request, bid, tid):
    if not request.user.is_superuser:
        return redirect("home")
    theme = get_object_or_404(BlueprintTheme, pk=tid, bengkel_id=bid)
    theme.delete()
    messages.success(request, "Tema telah dipadam.")
    return redirect("superadmin:detail_bengkel", bid=bid)


@login_required
def detail_bengkel(request, bid):
    if not request.user.is_superuser:
        return redirect("home")
    b = get_object_or_404(
        Bengkel.objects
        .select_related("created_by", "created_by__profile")
        .prefetch_related(
            "jemputan__kehadiran",
            "jemputan__contribution__files",
            "tentative",
            "blueprint_themes",
            "blueprint_pillars__ideas__user",
            "blueprint_strategies__ideas__user",
            "blueprint_action_plans__ideas__user",
            "blueprint_indicators",
            "blueprint_allocations__action_plan__allocation_ideas__user", # <--- Ini yang telah dibetulkan
        ),
        pk=bid,
    )

    jemputan_list = b.jemputan.select_related("user").prefetch_related("contribution__files").order_by("nama")

    # SPAF counts for this bengkel's accepted participants
    user_ids = list(
        b.jemputan.filter(status="accepted", user__isnull=False)
        .values_list("user_id", flat=True)
    )
    spaf_pain_count = SpafPainPoint.objects.filter(user_id__in=user_ids).count()
    spaf_ps_count = SpafProblemStatement.objects.filter(user_id__in=user_ids).count()

    return render(request, "superadmin/detail_bengkel.html", {
        "b": b,
        "jemputan_list": jemputan_list,
        "pending_permohonan": _pending_count(),
        "spaf_pain_count": spaf_pain_count,
        "spaf_ps_count": spaf_ps_count,
        "themes": b.blueprint_themes.all(),
        # TAMBAHAN DATA UNTUK NODE 4 HINGGA 8
        "pillars": b.blueprint_pillars.all(),
        "strategies": b.blueprint_strategies.all(),
        "action_plans": b.blueprint_action_plans.all(),
        "indicators": b.blueprint_indicators.all(),
        "allocations": b.blueprint_allocations.all(),
    })

import os
import chromadb
from django.conf import settings
from django.contrib import messages
from django.shortcuts import redirect
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST

@login_required
@require_POST
def reset_chromadb(request):
    """
    Superadmin: Mengosongkan ingatan AI dengan cara memadam 
    koleksi (collections) satu persatu menggunakan sambungan sedia ada.
    Ini mengelakkan ralat 'different settings' dan ralat 'WinError 32'.
    """
    if not request.user.is_superuser:
        messages.error(request, "Hanya Superadmin dibenarkan melakukan tindakan ini.")
        return redirect("bengkel:dashboard")

    base_dir = getattr(settings, 'BASE_DIR', None)
    
    if base_dir:
        chroma_path = os.path.join(base_dir, "chroma_db")
        
        if os.path.exists(chroma_path):
            try:
                # 1. Guna sambungan (client) sedia ada tanpa memaksa tetapan baharu
                client = chromadb.PersistentClient(path=chroma_path)
                
                # 2. Dapatkan senarai semua memori (collections) yang ada
                collections = client.list_collections()
                
                if collections:
                    # 3. Padam laci memori satu persatu
                    for c in collections:
                        # Kalis-ralat untuk pelbagai versi ChromaDB
                        col_name = c if isinstance(c, str) else c.name
                        client.delete_collection(col_name)
                        
                    messages.success(request, "✅ Memori Vektor AI berjaya dibersihkan! Anda kini boleh memuat naik dokumen baharu.")
                else:
                    messages.warning(request, "⚠️ Memori AI sudah pun kosong. Tiada fail untuk dipadam.")
                    
            except Exception as e:
                messages.error(request, f"❌ Gagal membersihkan memori AI: {e}")
        else:
            messages.warning(request, "⚠️ Pangkalan Data Vektor tidak ditemui. Mungkin ia belum dibina.")
    else:
        messages.error(request, "❌ Ralat sistem: BASE_DIR tidak ditemui.")

    return redirect("superadmin:dashboard")

@login_required
def tambah_peserta(request):
    if not request.user.is_superuser:
        messages.error(request, "Akses ditolak.")
        return redirect("home")

    if request.method == "POST":
        username = request.POST.get('username', '').strip()
        email = request.POST.get('email', '').strip()
        nama_penuh = request.POST.get('nama_penuh', '').strip()
        password = request.POST.get('password', '')
        
        # Maklumat selaras dengan register.html
        organisasi = request.POST.get('organisasi', '').strip()
        jawatan = request.POST.get('jawatan', '').strip()
        unit = request.POST.get('unit', '').strip()
        alamat = request.POST.get('alamat', '').strip()
        
        # Validasi mudah
        if User.objects.filter(username=username).exists():
            messages.error(request, "Nama pengguna telah wujud!")
            return redirect('superadmin:tambah_peserta')
            
        if User.objects.filter(email=email).exists():
            messages.error(request, "E-mel telah wujud!")
            return redirect('superadmin:tambah_peserta')

        # Pecahkan nama penuh kepada First Name dan Last Name
        nama_parts = nama_penuh.split(" ", 1)
        first_name = nama_parts[0] if len(nama_parts) > 0 else ""
        last_name  = nama_parts[1] if len(nama_parts) > 1 else ""

        # Cipta Pengguna (Peserta) - is_staff=False, is_active=True
        user = User.objects.create_user(
            username=username,
            email=email,
            password=password,
            first_name=first_name,
            last_name=last_name,
            is_staff=False,
            is_active=True 
        )
        
        # Cipta/Kemas kini Profile dengan selamat
        profile, created = UserProfile.objects.get_or_create(user=user)
        profile.organisasi = organisasi
        
        # Simpan medan tambahan jika ia wujud dalam model UserProfile anda
        if hasattr(profile, 'jawatan'):
            profile.jawatan = jawatan
        if hasattr(profile, 'unit'):
            profile.unit = unit
        if hasattr(profile, 'alamat'):
            profile.alamat = alamat
            
        profile.save()

        messages.success(request, f"Akaun Peserta '{username}' berjaya dicipta!")
        return redirect('superadmin:semua_pengguna')

    return render(request, 'superadmin/tambah_peserta.html', {"pending_permohonan": _pending_count()})
