<?php

namespace App\Http\Controllers;

use App\Http\Requests\DocumentShow;
use App\Http\Requests\FileUpload;
use App\Libs\Services\FileService;
use App\Libs\Services\LetterService;
use App\Libs\Services\RatificationLetterService;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Gate;

class FileController extends Controller
{
    public function uploadFile(FileUpload $request, FileService $fileService)
    {
        //se calar we need a temp_files table BD para guardar o nome original do file
        $data = $request->validated();
        $tempFileName = $fileService->storeFile($data);

        if (empty($tempFileName)) {
            return response()->json([], 404);
        }

        return response()->json([
            'fileName' => $tempFileName['finalName'],
            'fileUrl' => $tempFileName['fileUrl']
        ]);
    }


    public function downloadLetter(DocumentShow $request, LetterService $letterService)
    {
        $data = $request->validated();
        $letter = $letterService->findLetterById($data['id']);
        $filePath = 'letters/' . $letter->document->filename;
        $privateDisk = Storage::disk('private');

        if ($privateDisk->exists($filePath)) {
            return response()->download(storage_path('app/private/' . $filePath), $letter->document->original_filename);
        }

        return response()->json(['message' => 'Document not found'], 404);
    }

    public function downloadRatificationLetter(DocumentShow $request, RatificationLetterService $ratificationLetterService)
    {
        $data = $request->validated();
        $ratificationLetter = $ratificationLetterService->readRatificationLetter($data['id']);

        if ($ratificationLetter) {
            if (Gate::denies('viewRatificationLetter', $ratificationLetter)) {
                abort(403);
            }
        } else {
            return [
                'message' => 'not allowed',
            ];
        }

        $filePath = 'ratification-letters/' . $ratificationLetter->document->filename;
        $privateDisk = Storage::disk('private');

        if ($privateDisk->exists($filePath)) {
            return response()->download(storage_path('app/private/' . $filePath), $ratificationLetter->document->original_filename);
        }

        return response()->json(['message' => 'Document not found'], 404);
    }
}
