<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Barang;
use App\Models\Sewa;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class DashboardController extends Controller
{
    /**
     * Menampilkan halaman dashboard
     * 
     * @return \Illuminate\View\View
     */
    public function index()
    {
        // Cek tipe pengguna yang sedang login
        $userType = Auth::user()->tipe_pengguna;
        
        // Data untuk dashboard
        $stats = [
            'pengguna' => User::where('tipe_pengguna', 'user')->count(),
            'admin' => User::where('tipe_pengguna', 'admin')->count(),
            'total_pengguna' => User::count(),
            'barang' => Barang::count(),
            'sewa' => DB::table('sewas')->count()
        ];

        // Data grafik per tahun
        $yearlyStats = DB::table('sewas')
            ->select(
                DB::raw('YEAR(created_at) as tahun'),
                DB::raw('COUNT(*) as total_sewa'),
                DB::raw('SUM(total_harga) as total_pemasukan'),
                DB::raw('0 as total_pengeluaran') // Sementara set 0 karena belum ada kolom biaya_operasional
            )
            ->groupBy('tahun')
            ->orderBy('tahun', 'ASC')
            ->get();

        // Jika tidak ada data, tambahkan data dummy untuk tahun ini
        if ($yearlyStats->isEmpty()) {
            $yearlyStats = collect([
                (object)[
                    'tahun' => date('Y'),
                    'total_sewa' => 0,
                    'total_pemasukan' => 0,
                    'total_pengeluaran' => 0
                ]
            ]);
        }

        // Data pertumbuhan pengguna per tahun
        $userGrowth = DB::table('users')
            ->select(
                DB::raw('YEAR(created_at) as tahun'),
                DB::raw('COUNT(*) as total_pengguna')
            )
            ->groupBy('tahun')
            ->orderBy('tahun', 'ASC')
            ->get();

        // Jika tidak ada data pengguna, tambahkan data dummy
        if ($userGrowth->isEmpty()) {
            $userGrowth = collect([
                (object)[
                    'tahun' => date('Y'),
                    'total_pengguna' => User::count()
                ]
            ]);
        }

        // Format data untuk grafik
        $chartData = [
            'labels' => $yearlyStats->pluck('tahun')->toArray(),
            'datasets' => [
                [
                    'label' => 'Pemasukan',
                    'data' => $yearlyStats->pluck('total_pemasukan')->toArray(),
                    'backgroundColor' => 'rgba(34, 197, 94, 0.2)',
                    'borderColor' => 'rgb(34, 197, 94)',
                    'borderWidth' => 2,
                    'tension' => 0.4
                ],
                [
                    'label' => 'Pengeluaran',
                    'data' => $yearlyStats->pluck('total_pengeluaran')->toArray(),
                    'backgroundColor' => 'rgba(239, 68, 68, 0.2)',
                    'borderColor' => 'rgb(239, 68, 68)',
                    'borderWidth' => 2,
                    'tension' => 0.4
                ],
                [
                    'label' => 'Total Sewa',
                    'data' => $yearlyStats->pluck('total_sewa')->toArray(),
                    'backgroundColor' => 'rgba(59, 130, 246, 0.2)',
                    'borderColor' => 'rgb(59, 130, 246)',
                    'borderWidth' => 2,
                    'tension' => 0.4
                ]
            ]
        ];

        $userChartData = [
            'labels' => $userGrowth->pluck('tahun')->toArray(),
            'datasets' => [
                [
                    'label' => 'Total Pengguna',
                    'data' => $userGrowth->pluck('total_pengguna')->toArray(),
                    'backgroundColor' => 'rgba(139, 92, 246, 0.2)',
                    'borderColor' => 'rgb(139, 92, 246)',
                    'borderWidth' => 2,
                    'tension' => 0.4,
                    'fill' => true
                ]
            ]
        ];

        // Debug data
        // dd($chartData, $userChartData);

        // Data aktivitas
        $aktivitas = [];

        // Jika user adalah admin, tampilkan semua data
        if ($userType === 'admin') {
            // Ambil user terbaru yang mendaftar (baik admin maupun user)
            $latestUsers = User::latest()->take(5)->get();
            
            foreach ($latestUsers as $user) {
                $aktivitas[] = [
                    'type' => 'pengguna',
                    'title' => 'Pengguna ' . ucfirst($user->tipe_pengguna),
                    'description' => $user->nama . ' (' . $user->tipe_pengguna . ')',
                    'time' => Carbon::parse($user->created_at)->diffForHumans(),
                    'icon_color' => $user->tipe_pengguna === 'admin' ? 'indigo' : 'blue'
                ];
            }

            // Tambahkan aktivitas sewa terbaru
            $latestSewa = Sewa::with(['user', 'paket'])->latest()->first();
            if ($latestSewa) {
                $aktivitas[] = [
                    'type' => 'sewa',
                    'title' => 'Pemesanan Baru',
                    'description' => $latestSewa->user->nama . ' memesan paket ' . $latestSewa->paket->nama_paket,
                    'time' => Carbon::parse($latestSewa->created_at)->diffForHumans(),
                    'icon_color' => 'green'
                ];
            }
        } else {
            // Jika user adalah customer, hanya tampilkan data terbatas
            $aktivitas[] = [
                'type' => 'info',
                'title' => 'Selamat Datang',
                'description' => 'Anda login sebagai pengguna biasa. Anda hanya dapat melihat informasi.',
                'time' => 'Saat ini',
                'icon_color' => 'blue'
            ];
            
            // Tampilkan riwayat sewa pengguna ini saja
            $userSewa = Sewa::where('user_id', Auth::id())
                          ->with('paket')
                          ->latest()
                          ->first();
            
            if ($userSewa) {
                $aktivitas[] = [
                    'type' => 'sewa',
                    'title' => 'Pesanan Terakhir Anda',
                    'description' => 'Paket: ' . $userSewa->paket->nama_paket,
                    'time' => Carbon::parse($userSewa->created_at)->diffForHumans(),
                    'icon_color' => 'green'
                ];
            }
        }

        return view('dashboard', compact('stats', 'chartData', 'userChartData', 'aktivitas', 'userType'));
    }
    
    /**
     * Menampilkan halaman profile
     * 
     * @return \Illuminate\View\View
     */
    public function showProfile()
    {
        return view('profile');
    }
    
    /**
     * Update profile (dummy)
     * 
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function updateProfile(Request $request)
    {
        // Proses update profile akan ditambahkan nanti
        return redirect()->back()->with('success', 'Profile berhasil diperbarui');
    }
} 