<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;

class PenggunaController extends Controller
{
    public function __construct()
    {
        // Middleware untuk method yang membutuhkan akses admin
        $this->middleware('admin')->only(['create', 'store', 'edit', 'update', 'destroy']);
    }

    /**
     * Menampilkan halaman daftar pengguna
     * 
     * @return \Illuminate\View\View
     */
    public function index()
    {
        $pengguna = User::where('tipe_pengguna', 'admin')->get();
        $users = User::where('tipe_pengguna', 'user')->get();
        $activeTab = 'admin'; // Menandai tab admin sebagai aktif
        return view('pengguna', compact('pengguna', 'users', 'activeTab'));
    }
    
    /**
     * Menampilkan form tambah pengguna
     * 
     * @return \Illuminate\View\View
     */
    public function create()
    {
        return view('tambah-pengguna');
    }
    
    /**
     * Menyimpan pengguna baru
     * 
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(Request $request)
    {
        try {
            DB::beginTransaction();
            
            $validated = $request->validate([
                'nama' => 'required|string|max:255',
                'username' => 'required|string|max:255|unique:users',
                'email' => 'required|string|email|max:255|unique:users',
                'no_telp' => 'required|string|max:20',
                'alamat' => 'required|string',
                'password' => 'required|string|min:8'
            ]);

            $validated['password'] = Hash::make($validated['password']);
            $validated['tipe_pengguna'] = 'admin';
            
            User::create($validated);
            
            DB::commit();
            return redirect()->route('pengguna')->with('success', 'Admin berhasil ditambahkan');
            
        } catch (\Exception $e) {
            DB::rollback();
            Log::error('Error saat menambah admin: ' . $e->getMessage());
            return redirect()->back()->with('error', 'Terjadi kesalahan saat menambah admin')->withInput();
        }
    }

    /**
     * Menghapus pengguna
     * 
     * @param  int  $id
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy($id)
    {
        try {
            $user = User::findOrFail($id);
            
            // Pastikan tidak menghapus diri sendiri
            if ($user->id === auth()->id()) {
                return redirect()->back()->with('error', 'Anda tidak dapat menghapus akun Anda sendiri');
            }
            
            // Pastikan yang dihapus adalah admin
            if ($user->tipe_pengguna !== 'admin') {
                return redirect()->back()->with('error', 'Anda hanya dapat menghapus akun admin melalui menu ini');
            }
            
            $user->delete();
            return redirect()->route('pengguna')->with('success', 'Admin berhasil dihapus');
            
        } catch (\Exception $e) {
            Log::error('Error saat menghapus admin: ' . $e->getMessage());
            return redirect()->back()->with('error', 'Terjadi kesalahan saat menghapus admin');
        }
    }
} 