<?php

namespace App\Http\Controllers;

use App\Models\Chat;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class ChatController extends Controller
{
    /**
     * Menampilkan daftar chat untuk pengguna yang sedang login.
     *
     * @return \Illuminate\View\View
     */
    public function index()
    {
        // Mengambil semua chat yang terkait dengan pengguna yang sedang login
        $chats = Chat::where('user_id', Auth::id())
            ->orWhere('recipient_id', Auth::id())
            ->orderBy('created_at', 'asc')
            ->get();

        // Menampilkan tampilan dengan chat yang ditemukan
        return view('chat.index', compact('chats'));
    }

    /**
     * Menyimpan pesan chat yang dikirim oleh pengguna.
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function send(Request $request)
    {
        // Validasi input
        $request->validate([
            'message' => 'required|string|max:255',
            'recipient_id' => 'required|exists:users,id',  // Memastikan penerima ada di tabel users
        ]);

        // Menyimpan pesan chat ke database
        Chat::create([
            'user_id' => Auth::id(),  // ID pengirim
            'recipient_id' => $request->recipient_id,  // ID penerima
            'message' => $request->message,  // Isi pesan
        ]);

        // Redirect kembali ke halaman chat
        return redirect()->route('chat.index');
    }

    /**
     * Menampilkan percakapan antara pengguna yang sedang login dengan pengguna tertentu.
     *
     * @param int $recipientId
     * @return \Illuminate\View\View
     */
    public function show($recipientId)
    {
        // Mengambil semua chat antara pengguna yang sedang login dan penerima tertentu
        $chats = Chat::where(function ($query) use ($recipientId) {
            $query->where('user_id', Auth::id())
                ->where('recipient_id', $recipientId);
        })
        ->orWhere(function ($query) use ($recipientId) {
            $query->where('user_id', $recipientId)
                ->where('recipient_id', Auth::id());
        })
        ->orderBy('created_at', 'asc')
        ->get();

        // Menampilkan halaman chat antara pengguna login dan penerima tertentu
        return view('chat.show', compact('chats', 'recipientId'));
    }
}
