<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Penggajian;
use Illuminate\Http\Request;
use Exception;

class GajiApiController extends Controller
{
    /**
     * GET - Riwayat penggajian teknisi
     */
    public function riwayat(Request $request)
    {
        try {
            $idTeknisi = $request->input('id_teknisi');

            if (!$idTeknisi) {
                return response()->json([
                    'success' => false,
                    'message' => 'ID Teknisi tidak ditemukan'
                ], 401);
            }

            $riwayat = Penggajian::where('id_teknisi', $idTeknisi)
                ->orderBy('periode_tahun', 'desc')
                ->orderBy('periode_bulan', 'desc')
                ->paginate(12);

            $riwayat->getCollection()->transform(function ($item) {
                return [
                    'id_penggajian'      => $item->id_penggajian,
                    'periode_bulan'      => $item->periode_bulan,
                    'periode_tahun'      => $item->periode_tahun,
                    'nama_bulan'         => Penggajian::getNamaBulan($item->periode_bulan),
                    'tanggal_penggajian' => $item->tanggal_penggajian->format('d M Y'),
                    'total_ongkos'       => (float) $item->total_ongkos_pekerjaan,
                    'potongan_kasbon'    => (float) $item->total_kasbon,
                    'potongan_makan'     => (float) $item->biaya_makan,
                    'gaji_bersih'        => (float) $item->gaji_bersih,
                    'status_pembayaran'  => $item->status_pembayaran,
                    'is_paid'            => $item->isPaid(),
                ];
            });

            return response()->json([
                'success' => true,
                'message' => 'Riwayat gaji berhasil diambil',
                'data'    => $riwayat
            ]);

        } catch (Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'Gagal mengambil data: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * GET - Detail slip gaji
     */
    public function show(Request $request, $id)
    {
        try {
            $idTeknisi = $request->input('id_teknisi');
            $penggajian = Penggajian::with(['detailPenggajian.penugasan'])->findOrFail($id);

            // Keamanan: Pastikan teknisi hanya bisa lihat gajinya sendiri
            if ($idTeknisi && $penggajian->id_teknisi != $idTeknisi) {
                return response()->json([
                    'success' => false,
                    'message' => 'Akses ditolak'
                ], 403);
            }

            $details = $penggajian->detailPenggajian->map(function ($detail) {
                return [
                    'id_penugasan'     => $detail->id_penugasan,
                    'pekerjaan'        => $detail->penugasan->label_jenis_pekerjaan ?? 'Pekerjaan',
                    'lokasi'           => $detail->lokasi,
                    'bagian_ongkos'    => (float) $detail->bagian_ongkos,
                    'rincian'          => $detail->rincian_pekerjaan,
                    'tanggal_selesai'  => $detail->tanggal_selesai ? $detail->tanggal_selesai->format('d/m/Y') : '-',
                ];
            });

            return response()->json([
                'success' => true,
                'message' => 'Detail gaji berhasil diambil',
                'data'    => [
                    'header' => [
                        'id_penggajian'      => $penggajian->id_penggajian,
                        'periode'            => Penggajian::getNamaBulan($penggajian->periode_bulan) . ' ' . $penggajian->periode_tahun,
                        'tanggal_hitung'     => $penggajian->tanggal_penggajian->format('d M Y'),
                        'hari_kerja'         => $penggajian->jumlah_hari_kerja,
                        'gaji_kotor'         => (float) $penggajian->total_ongkos_pekerjaan,
                        'potongan_kasbon'    => (float) $penggajian->total_kasbon,
                        'potongan_makan'     => (float) $penggajian->biaya_makan,
                        'gaji_bersih'        => (float) $penggajian->gaji_bersih,
                        'status_pembayaran'  => $penggajian->status_pembayaran,
                    ],
                    'items' => $details
                ]
            ]);

        } catch (Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'Data tidak ditemukan: ' . $e->getMessage()
            ], 404);
        }
    }
}
