<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Admin;
use App\Models\SubadminRequest;
use App\Models\Transaction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class SubadminController extends Controller
{
    public function index()
    {
        $pageTitle = 'Manage Subadmins';
        $subadmins = Admin::where('role', 2)->paginate(getPaginate());
        return view('admin.subadmin.index', compact('pageTitle', 'subadmins'));
    }

    public function create()
    {
        $pageTitle = 'Create Subadmin';
        return view('admin.subadmin.create', compact('pageTitle'));
    }

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:191',
            'username' => 'required|string|max:191|unique:admins',
            'password' => 'required|min:6',
            'unique_code' => 'required|digits:10|unique:admins,unique_code',
        ]);

        $subadmin = new Admin();
        $subadmin->name = $request->name;
        $subadmin->username = $request->username;
        $subadmin->email = $request->username . '@skycrestaviationacademy.com';
        $subadmin->password = Hash::make($request->password);
        $subadmin->role = 2;
        $subadmin->unique_code = $request->unique_code;
        $subadmin->save();


        $notify[] = ['success', 'Subadmin created successfully'];
        return redirect()->route('admin.subadmin.index')->withNotify($notify);
    }

    public function edit($id)
    {
        $pageTitle = 'Edit Subadmin';
        $subadmin = Admin::where('role', 2)->findOrFail($id);
        return view('admin.subadmin.edit', compact('pageTitle', 'subadmin'));
    }

    public function update(Request $request, $id)
    {
        $subadmin = Admin::where('role', 2)->findOrFail($id);
        $request->validate([
            'name' => 'required|string|max:191',
            'password' => 'nullable|min:6',
        ]);

        $subadmin->name = $request->name;
        $subadmin->email = $request->email;
        if ($request->password) {
            $subadmin->password = Hash::make($request->password);
        }
        $subadmin->save();

        $notify[] = ['success', 'Subadmin updated successfully'];
        return back()->withNotify($notify);
    }

    public function addBalance(Request $request, $id)
    {
        $request->validate(['amount' => 'required|numeric|gt:0']);
        $subadmin = Admin::where('role', 2)->findOrFail($id);
        
        $subadmin->wallet += $request->amount;
        $subadmin->save();

        // Log transaction (Optional: create a separate table for admin transactions if needed, but for now we'll use a simple log)
        
        $notify[] = ['success', 'Balance added successfully'];
        return back()->withNotify($notify);
    }

    public function requests()
    {
        $pageTitle = 'Subadmin Requests';
        $requests = SubadminRequest::with('subadmin')->orderBy('id', 'desc')->paginate(getPaginate());
        return view('admin.subadmin.requests', compact('pageTitle', 'requests'));
    }

    public function requestApprove($id)
    {
        $request = SubadminRequest::where('status', 0)->findOrFail($id);
        $request->status = 1;
        $request->save();

        $subadmin = Admin::findOrFail($request->subadmin_id);
        if ($request->type == 'deposit') {
            $subadmin->wallet += $request->amount;
        } else {
            // Withdrawal is already deducted or handled
        }
        $subadmin->save();

        $notify[] = ['success', 'Request approved successfully'];
        return back()->withNotify($notify);
    }
}
