<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Resources\SubtaskResource;
use App\Models\Subtask;
use App\Models\Task;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class SubtaskController extends Controller
{
    public function index(Request $request, Task $task): JsonResponse
    {
        try {
            $subtasks = $task->subtasks()->with('assignee')->orderBy('position')->get();

            return response()->json([
                'success' => true,
                'data' => SubtaskResource::collection($subtasks),
                'message' => 'لیست زیروظایف',
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطا در دریافت زیروظایف',
            ], 500);
        }
    }

    public function store(Request $request, Task $task): JsonResponse
    {
        try {
            $request->validate([
                'title' => 'required|string|max:255',
                'description' => 'nullable|string',
                'assignee_id' => 'nullable|exists:users,id',
                'due_date' => 'nullable|date',
                'position' => 'nullable|integer',
            ]);

            $data = $request->only(['title', 'description', 'assignee_id', 'due_date', 'position']);
            $data['task_id'] = $task->id;
            $data['status'] = 'todo';
            $subtask = Subtask::create($data);
            $subtask->load('assignee');

            return response()->json([
                'success' => true,
                'data' => new SubtaskResource($subtask),
                'message' => 'زیروظیفه ایجاد شد',
            ], 201);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطا در ایجاد زیروظیفه',
            ], 500);
        }
    }

    public function update(Request $request, Subtask $subtask): JsonResponse
    {
        try {
            $request->validate([
                'title' => 'sometimes|required|string|max:255',
                'description' => 'nullable|string',
                'assignee_id' => 'nullable|exists:users,id',
                'due_date' => 'nullable|date',
                'position' => 'nullable|integer',
            ]);

            $subtask->update($request->only(['title', 'description', 'assignee_id', 'due_date', 'position']));
            $subtask->load('assignee');

            return response()->json([
                'success' => true,
                'data' => new SubtaskResource($subtask->fresh()),
                'message' => 'زیروظیفه به‌روزرسانی شد',
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطا در به‌روزرسانی زیروظیفه',
            ], 500);
        }
    }

    public function destroy(Subtask $subtask): JsonResponse
    {
        try {
            $subtask->delete();

            return response()->json([
                'success' => true,
                'message' => 'زیروظیفه حذف شد',
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطا در حذف زیروظیفه',
            ], 500);
        }
    }

    public function updateStatus(Request $request, Subtask $subtask): JsonResponse
    {
        try {
            $request->validate(['status' => 'required|string']);
            $subtask->update(['status' => $request->status]);
            $subtask->load('assignee');

            return response()->json([
                'success' => true,
                'data' => new SubtaskResource($subtask->fresh()),
                'message' => 'وضعیت زیروظیفه به‌روزرسانی شد',
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطا در به‌روزرسانی وضعیت',
            ], 500);
        }
    }
}
