<?php

namespace App\Http\Controllers;

use App\Models\Pelanggan;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class PelangganController extends Controller
{
    public function index(Request $request)
    {
        $search = $request->search;

        $pelanggan = Pelanggan::when($search, function($q) use ($search) {
                $q->where('nama_pelanggan', 'like', "%{$search}%")
                  ->orWhere('alamat', 'like', "%{$search}%")
                  ->orWhere('nomor_telepon', 'like', "%{$search}%");
            })
            ->get();

        return view('pelanggan.index', compact('pelanggan'));
    }

    public function create()
    {
        return view('pelanggan.create');
    }

   public function store(Request $request)
{
    // Validasi input
    $request->validate([
        'nama_pelanggan' => 'required|string|max:80',
        'alamat' => 'required|string',
        'nomor_telepon' => 'required|string|max:20',
        'status' => 'required|in:aktif,nonaktif', 
    ]);

    try {
        DB::beginTransaction();

        $pelanggan = Pelanggan::create([
            'nama_pelanggan' => $request->nama_pelanggan,
            'alamat' => $request->alamat,
            'nomor_telepon' => $request->nomor_telepon,
            'status' => $request->status,
        ]);

        DB::commit();

        // -----------------------------
        // SOLUSI PENTING ada di sini
        // -----------------------------
        if ($request->expectsJson()) {
            return response()->json([
                'success' => true,
                'message' => 'Pelanggan berhasil ditambahkan',
                'pelanggan' => [
                    'pelanggan_id' => $pelanggan->pelanggan_id,
                    'nama_pelanggan' => $pelanggan->nama_pelanggan,
                    'status' => $pelanggan->status
                ]
            ]);
        }

        // Jika request biasa
        return redirect()->route('pelanggan.index')->with('success', 'Data pelanggan berhasil ditambahkan');

    } catch (\Exception $e) {
        DB::rollBack();

        if ($request->expectsJson()) {
            return response()->json([
                'success' => false,
                'message' => 'Gagal menambahkan pelanggan: ' . $e->getMessage()
            ], 500);
        }

        return redirect()->back()->with('error', 'Gagal menambahkan pelanggan: ' . $e->getMessage());
    }
}


    public function edit(string $id)
    {
        $pelanggan = Pelanggan::findOrFail($id);
        return view('pelanggan.edit', compact('pelanggan'));
    }

    public function update(Request $request, string $id)
    {
        $request->validate([
            'nama_pelanggan' => 'required|string|max:80',
            'alamat' => 'required|string',
            'nomor_telepon' => 'required|string|max:20',
            'status' => 'required|in:aktif,nonaktif', 
        ]);

        $pelanggan = Pelanggan::findOrFail($id);

        $pelanggan->update([
            'nama_pelanggan' => $request->nama_pelanggan,
            'alamat' => $request->alamat,
            'nomor_telepon' => $request->nomor_telepon,
            'status' => $request->status, 
        ]);

        return redirect()->route('pelanggan.index')->with('success', 'Data pelanggan berhasil diupdate');
    }

    public function destroy(string $id)
    {
        $pelanggan = Pelanggan::findOrFail($id);
        $pelanggan->delete();

        return redirect()->route('pelanggan.index')->with('success', 'Data pelanggan berhasil dihapus');
    }
}
