<?php

namespace App\Http\Controllers\Api;
use App\Http\Requests\Api\User\DocumentStoreRequest;
use App\Models\DocumentCategory;
use App\Models\DocumentType;
use App\Models\EmployeeDocument;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\ApiBaseController;

class documentController extends ApiBaseController
{
    /**
     * Get only categories (id, name)
     */
    public function getCategories()
    {
        $categories = DocumentCategory::select('id', 'name')->get();

        return response()->json([
            'success' => true,
            'data'    => $categories
        ]);
    }

    /**
     * Get document types grouped by category_id
     */
    public function getDocumentTypes($xid)
    {
        $user_id = $this->getIdFromHash($xid);   

        $uploadedDocs = EmployeeDocument::where('user_id', $user_id)->get();

    
        $uploadedTypeIds = $uploadedDocs->pluck('document_type_id')->toArray();

       
        $types = DocumentType::select('id', 'category_id', 'name')
            ->whereNotIn('id', $uploadedTypeIds)
            ->get()
            ->groupBy('category_id');
             return response()->json([
            'success' => true,
            'data'    => $types,
        ]);
    }



    public function getEmpDocuments($xid)
    {
        
        $user_id = $this->getIdFromHash($xid);
     

        $documents = EmployeeDocument::where('user_id', $user_id)
            ->with([
                'type:id,name',
                'category:id,name',
                'employee:id,name', // uploaded_by
            ])
            ->get()
            ->map(function ($doc) {
                return [
                    'id'           =>$doc->id,
                    'document_id'   => $doc->document_id,
                    'document_type' => $doc->type?->name,
                    'category'      => $doc->category?->name,
                    'title'         => $doc->title,
                    'description'   => $doc->description,
                    'file_path'     => $doc->file_path,
                    'uploaded_by'   => $doc->uploaded_by,
                    'verification'  => $doc->verification, 
                    'created_at'    => $doc->created_at->toDateString(),
                    'file_url'      => $doc->file_path ? asset('storage/' . $doc->file_path) : null,
                ];
            });

        return response()->json([
            'success' => true,
            'data'    => $documents,
        ]);
    }



    /**
     * Store uploaded employee document
     */
    public function storeDocument(DocumentStoreRequest $request)
    { 
        // $request=request();
        
        $user=user();
        $user_id=$this->getIdFromHash($request->user_id);
        // $request->validate([
            
        //     'category_id'      => 'required|exists:document_categories,id',
        //     'document_type_id' => 'required|exists:document_types,id',
        //     'title'            => 'nullable|string|max:255',
        //     'description'      => 'nullable|string',
        //     'ID'               =>'nullable|string',
        //     'user_document_url'=>'nullable|string',
        //     'user_document'    =>'nullable|string',
        // ]);



        // Save DB record
        $doc = new EmployeeDocument();
        $doc->user_id          = $user_id;
        $doc->category_id      = $request->category_id;
        $doc->document_type_id = $request->document_type_id;
        $doc->title            = $request->title;
        $doc->description      = $request->description;
        $doc->file_path        = $request->user_document_url;
        $doc->document_id      = $request->id;
        $doc->uploaded_by      = $user->name;
        $doc->verification      = 'verified';
        $doc->save();

        return response()->json([
            'success' => true,
            'message' => 'Document uploaded successfully',
            'data'    => $doc
        ]);
    }

    public function delete($id)
    {
        $doc = EmployeeDocument::findOrFail($id);

        if ($doc->file_path && Storage::disk('public')->exists($doc->file_path)) {
            Storage::disk('public')->delete($doc->file_path);
        }

        $doc->delete();

        return response()->json([
            'success' => true,
            'message' => 'Document deleted successfully',
        ]);
    }
}
