<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\JadwalImunisasi;
use Illuminate\Support\Facades\Storage;

class JadwalImunisasiController extends Controller
{
    // Menampilkan semua jadwal imunisasi berdasarkan anak
    public function index(Request $request)
    {
        $anak_id = $request->query('anak_id');
        $jadwal = JadwalImunisasi::where('anak_id', $anak_id)->get();
        return response()->json($jadwal, 200);
    }

    // Menyimpan jadwal imunisasi baru
    public function store(Request $request)
    {
        $request->validate([
            'anak_id' => 'required|exists:anak,id',
            'nama_imunisasi' => 'required|string|max:255',
            'tanggal_imunisasi' => 'required|date',
            'is_done' => 'sometimes|boolean',
            'bukti_file' => 'nullable|file|mimes:jpg,jpeg,png,pdf|max:2048',
        ]);

        $data = $request->all();

        // Proses upload file jika ada
        if ($request->hasFile('bukti_file')) {
            $file = $request->file('bukti_file');
            $path = $file->store('bukti_imunisasi', 'public'); // simpan ke storage/app/public/bukti_imunisasi
            $data['bukti_file'] = $path;
        }

        $jadwal = JadwalImunisasi::create($data);

        return response()->json($jadwal, 201);
    }

    // Menampilkan detail jadwal imunisasi
    public function show($id)
    {
        $jadwal = JadwalImunisasi::find($id);

        if (!$jadwal) {
            return response()->json(['message' => 'Data tidak ditemukan'], 404);
        }

        return response()->json($jadwal, 200);
    }

    // Mengupdate jadwal imunisasi (termasuk bukti_file)
    public function update(Request $request, $id)
    {
        $jadwal = JadwalImunisasi::find($id);

        if (!$jadwal) {
            return response()->json(['message' => 'Data tidak ditemukan'], 404);
        }

        $request->validate([
            'nama_imunisasi' => 'sometimes|required|string|max:255',
            'tanggal_imunisasi' => 'sometimes|required|date',
            'bukti_file' => 'nullable|file|mimes:jpg,jpeg,png,pdf|max:2048',
        ]);

        $data = $request->all();

        // Handle upload file baru (replace yang lama jika ada)
        if ($request->hasFile('bukti_file')) {
            // Hapus file lama jika ada
            if ($jadwal->bukti_file && Storage::disk('public')->exists($jadwal->bukti_file)) {
                Storage::disk('public')->delete($jadwal->bukti_file);
            }

            $file = $request->file('bukti_file');
            $path = $file->store('bukti_imunisasi', 'public');
            $data['bukti_file'] = $path;
        }

        $jadwal->update($data);

        return response()->json($jadwal, 200);
    }

    // Menghapus jadwal imunisasi dan file buktinya jika ada
    public function destroy($id)
    {
        $jadwal = JadwalImunisasi::find($id);

        if (!$jadwal) {
            return response()->json(['message' => 'Data tidak ditemukan'], 404);
        }

        // Hapus file bukti jika ada
        if ($jadwal->bukti_file && Storage::disk('public')->exists($jadwal->bukti_file)) {
            Storage::disk('public')->delete($jadwal->bukti_file);
        }

        $jadwal->delete();

        return response()->json(['message' => 'Data berhasil dihapus'], 200);
    }

    // Toggle status selesai
    public function toggleStatus($id)
    {
        $jadwal = JadwalImunisasi::find($id);

        if (!$jadwal) {
            return response()->json(['message' => 'Data tidak ditemukan'], 404);
        }

        $jadwal->is_done = !$jadwal->is_done;
        $jadwal->save();

        return response()->json($jadwal, 200);
    }
}