<?php

namespace App\Http\Controllers\api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;

class TugasMobileController extends Controller
{
    public function uploadTugas(Request $request)
    {
        // Validasi input
        // $validator = Validator::make($request->all(), [
        //     'id_tugas' => 'required|integer',
        //     'id_siswa' => 'required|integer',
        //     'essay_answer' => 'required|string',
        //     'file_tugas' => 'nullable|string', // Validasi untuk file tugas base64 string, bisa nullable
        // ]);

        // if ($validator->fails()) {
        //     return response()->json(['message' => 'Validation error', 'errors' => $validator->errors()], 400);
        // }

        $idTugas = $request->input('id_tugas');
        $idSiswa = $request->input('id_siswa');
        $essayAnswer = $request->input('essay_answer');
        $fileTugas = $request->input('file_tugas'); // Base64 encoded string

        try {
            // Cek apakah siswa sudah pernah meng-upload tugas dengan idTugas dan idSiswa yang sama sebelumnya
            $existingSubmission = DB::table('pengumpulan_tugas')
                ->where('id_tugas', $idTugas)
                ->where('id_siswa', $idSiswa)
                ->exists();

            if ($existingSubmission) {
                return response()->json(['message' => 'Siswa sudah meng-upload tugas ini sebelumnya'], 400);
            }

            $filename = null;
            // Proses file jika ada
            if (!empty($fileTugas)) {
                // Decode file dari Base64 ke binary
                $binaryFile = base64_decode($fileTugas);

                // Generate nama file dengan format idSiswa_idTugas_tanggalWaktu.pdf
                $filename = $idSiswa . '_' . $idTugas . '_' . now()->format('YmdHis') . '.pdf';
                $filePath = 'documents/' . $filename;

                // Simpan file ke storage/app/public/documents
                Storage::put('public/' . $filePath, $binaryFile);
            }

            // Tambahkan data ke database
            DB::table('pengumpulan_tugas')->insert([
                'lampiran_tugas' => $filePath,
                'essay_answer' => $essayAnswer,
                'id_tugas' => $idTugas,
                'id_siswa' => $idSiswa,
                'nilai' => 0,
                'created_at' => now(),
                'updated_at' => now(),
            ]);

            return response()->json(['message' => 'Data tugas berhasil ditambahkan'], 200);
        } catch (\Exception $e) {
            // Tangani jika terjadi kesalahan
            return response()->json(['message' => 'Terjadi kesalahan saat mengupload file atau menambahkan data tugas', 'error' => $e->getMessage()], 500);
        }
    }

public function lihatTugas(Request $request)
{
    // Validasi request
    $request->validate([
        'id_tugas' => 'required|integer',
    ]);

    $id_tugas = $request->input('id_tugas');

    // Dapatkan nama file dari database
    $fileName = DB::table('tugas')
        ->where('id_tugas', $id_tugas)
        ->value('file_path');

    if ($fileName) {
        // Dapatkan URL lengkap ke file
        $fileUrl = Storage::url($fileName);

        // Tambahkan header "ngrok-skip-browser-warning"
        return response()->json([
            'fileUrl' => asset($fileUrl),
        ]);
    } else {
        // Jika tidak ada data tugas yang ditemukan
        return response()->json(['message' => 'Tugas tidak ditemukan'], 404);
    }
}

    public function tampilRiwayatPengumpulanTugas(Request $request)
    {
        // Validasi input
        $validated = $request->validate([
            'id_tugas' => 'required|integer',
            'id_siswa' => 'required|integer',
        ]);

        $id_tugas = $validated['id_tugas'];
        $id_siswa = $validated['id_siswa'];

        try {
            // Cari data pengumpulan tugas berdasarkan id_tugas dan id_siswa
            $pengumpulanTugas = DB::table('pengumpulan_tugas')
                ->where('id_tugas', $id_tugas)
                ->where('id_siswa', $id_siswa)
                ->get();

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

            return response()->json($pengumpulanTugas);
        } catch (\Exception $e) {
            return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500);
        }
    }
}
