<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Armada;
use Illuminate\Database\QueryException; // Ditambahkan untuk menangkap error relasi database

class AdminArmadaController extends Controller
{
    public function index(Request $request)
    {
        try {
            $user = $request->user();
            $query = Armada::orderBy('name', 'asc');

            // PENAMBAHAN: Filter Hak Akses Cabang
            // Memastikan admin cabang hanya melihat armada yang ditugaskan di cabangnya sendiri
            if ($user && $user->role !== 'owner') {
                $query->where('branch_id', $user->branch_id);
            }

            $armadas = $query->get();
            return response()->json(['success' => true, 'data' => $armadas], 200);
        } catch (\Exception $e) {
            return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
        }
    }

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'license_plate' => 'required|string|max:50|unique:armadas,license_plate',
            'branch_id' => 'nullable|exists:branches,id' // TAMBAHAN: Opsional agar Owner bisa menentukan cabang
        ], [
            'license_plate.unique' => 'Nomor polisi ini sudah terdaftar di sistem.'
        ]);

        try {
            $user = $request->user();
            
            // PENAMBAHAN: Otomatisasi penempatan armada ke cabang yang tepat
            $branchId = ($user && $user->role === 'owner' && $request->filled('branch_id')) 
                        ? $request->branch_id 
                        : ($user->branch_id ?? 1);

            $armada = Armada::create([
                'name' => strtoupper($request->name),
                'license_plate' => strtoupper($request->license_plate),
                'branch_id' => $branchId, // Simpan relasi cabang
            ]);

            return response()->json(['success' => true, 'message' => 'Armada berhasil ditambahkan', 'data' => $armada], 201);
        } catch (\Exception $e) {
            return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
        }
    }

    public function update(Request $request, $id)
    {
        $armada = Armada::findOrFail($id);
        $user = $request->user();

        // PENAMBAHAN: Proteksi Hak Akses Cabang saat Update
        if ($user && $user->role !== 'owner' && $armada->branch_id !== $user->branch_id) {
            return response()->json([
                'success' => false, 
                'message' => 'Akses ditolak: Anda tidak memiliki hak untuk mengubah data armada cabang lain.'
            ], 403);
        }

        $request->validate([
            'name' => 'required|string|max:255',
            'license_plate' => 'required|string|max:50|unique:armadas,license_plate,' . $id,
            'branch_id' => 'nullable|exists:branches,id'
        ]);

        try {
            // Update branch_id hanya jika dilakukan oleh Owner, selain itu pertahankan data lama
            $branchId = ($user && $user->role === 'owner' && $request->filled('branch_id')) 
                        ? $request->branch_id 
                        : $armada->branch_id;

            $armada->update([
                'name' => strtoupper($request->name),
                'license_plate' => strtoupper($request->license_plate),
                'branch_id' => $branchId,
            ]);

            return response()->json(['success' => true, 'message' => 'Data armada berhasil diperbarui', 'data' => $armada], 200);
        } catch (\Exception $e) {
            return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
        }
    }

    public function destroy(Request $request, $id)
    {
        try {
            $armada = Armada::findOrFail($id);
            $user = $request->user();

            // PENAMBAHAN: Proteksi Hak Akses Cabang saat Hapus
            if ($user && $user->role !== 'owner' && $armada->branch_id !== $user->branch_id) {
                return response()->json([
                    'success' => false, 
                    'message' => 'Akses ditolak: Anda tidak berhak menghapus data armada cabang lain.'
                ], 403);
            }

            $armada->delete();
            return response()->json(['success' => true, 'message' => 'Armada berhasil dihapus'], 200);
            
        } catch (QueryException $e) {
            // PROTEKSI ENTERPRISE: Menangkap error constraint violation (kode 23000)
            // Mencegah hard-delete jika armada sudah dipakai di tabel pengiriman (Sales Order / Surat Jalan / POD)
            if ($e->getCode() == "23000") {
                return response()->json([
                    'success' => false, 
                    'message' => 'Armada tidak dapat dihapus karena sudah memiliki riwayat pengiriman aktif (Surat Jalan/POD). Silakan nonaktifkan armada ini alih-alih menghapusnya.'
                ], 400);
            }
            return response()->json(['success' => false, 'message' => 'Gagal menghapus data armada: Database Error.'], 500);
        } catch (\Exception $e) {
            return response()->json(['success' => false, 'message' => 'Gagal menghapus data: ' . $e->getMessage()], 500);
        }
    }
}