<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Penugasan;
use App\Models\Penggajian;
use App\Models\Kasbon;
use App\Models\Teknisi;
use Illuminate\Http\Request;
use Exception;
use Carbon\Carbon;

class DashboardApiController extends Controller
{
    /**
     * GET - Data dashboard mobile teknisi
     */
    public function index(Request $request)
    {
        try {
            $idTeknisi = $request->input('id_teknisi');

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

            $teknisi = Teknisi::findOrFail($idTeknisi);

            // 1. Tugas Hari Ini / Aktif
            $tugasAktif = Penugasan::where(function ($q) use ($idTeknisi) {
                    $q->where('id_teknisi', $idTeknisi)
                      ->orWhereHas('timTeknisi', function ($sq) use ($idTeknisi) {
                          $sq->where('id_teknisi', $idTeknisi);
                      });
                })
                ->whereIn('status_pekerjaan', ['belum_mulai', 'dalam_proses'])
                ->count();

            // 2. Gaji Bulan Berjalan (Estimasi Ongkos Kerja)
            $now = Carbon::now();
            $estimasiGaji = Penugasan::where(function ($q) use ($idTeknisi) {
                    $q->where('id_teknisi', $idTeknisi)
                      ->orWhereHas('timTeknisi', function ($sq) use ($idTeknisi) {
                          $sq->where('id_teknisi', $idTeknisi);
                      });
                })
                ->where('status_pekerjaan', 'selesai')
                ->whereMonth('tanggal_diselesaikan', $now->month)
                ->whereYear('tanggal_diselesaikan', $now->year)
                ->get()
                ->sum(function($t) use ($idTeknisi) {
                    // Jika tim, bagi ongkos
                    if ($t->id_teknisi != $idTeknisi) {
                        $jumlahTim = $t->timTeknisi->count();
                        return $jumlahTim > 0 ? $t->total_nilai_pekerjaan / $jumlahTim : 0;
                    }
                    return $t->total_nilai_pekerjaan;
                });

            // 3. Total Kasbon Aktif
            $totalKasbon = Kasbon::where('id_teknisi', $idTeknisi)
                ->where('status', 'belum_lunas')
                ->sum('jumlah_kasbon');

            // 4. Gaji Terakhir Diterima
            $gajiTerakhir = Penggajian::where('id_teknisi', $idTeknisi)
                ->where('status_pembayaran', 'sudah_bayar')
                ->orderBy('periode_tahun', 'desc')
                ->orderBy('periode_bulan', 'desc')
                ->first();

            return response()->json([
                'success' => true,
                'message' => 'Data dashboard berhasil diambil',
                'data'    => [
                    'teknisi' => [
                        'nama' => $teknisi->nama,
                        'spesialisasi' => $teknisi->spesialisasi,
                        'foto' => $teknisi->foto_url
                    ],
                    'statistik' => [
                        'tugas_aktif'    => $tugasAktif,
                        'estimasi_gaji'  => (float) $estimasiGaji,
                        'total_kasbon'   => (float) $totalKasbon,
                        'gaji_terakhir'  => $gajiTerakhir ? (float) $gajiTerakhir->gaji_bersih : 0,
                        'periode_terakhir' => $gajiTerakhir ? Penggajian::getNamaBulan($gajiTerakhir->periode_bulan) . ' ' . $gajiTerakhir->periode_tahun : '-'
                    ]
                ]
            ]);

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