<?php

namespace WMS\Controllers;

use WMS\Core\Request;
use WMS\Core\Response;
use WMS\Middleware\AuthMiddleware;
use WMS\Services\WarehouseTaskService;

class TaskController
{
    /**
     * GET /api/tasks/{warehouse_id}
     * Query: ?task_type=PUTAWAY&assigned_to=3
     */
    public static function index(array $params): void
    {
        $service = new WarehouseTaskService();
        $tasks = $service->getOpenTasks(
            (int) $params['warehouse_id'],
            Request::query('task_type'),
            Request::query('assigned_to') ? (int) Request::query('assigned_to') : null
        );
        Response::success($tasks);
    }

    /**
     * GET /api/tasks/detail/{id}
     */
    public static function show(array $params): void
    {
        $service = new WarehouseTaskService();
        $task = $service->getTask((int) $params['id']);
        if (!$task) {
            Response::error('Tarea no encontrada', 404);
            return;
        }
        Response::success($task);
    }

    /**
     * POST /api/tasks/{task_id}/assign
     * Body: { operator_id }
     */
    public static function assign(array $params): void
    {
        $body = Request::body();
        if (empty($body['operator_id'])) {
            Response::error('operator_id requerido', 422);
            return;
        }

        try {
            $service = new WarehouseTaskService();
            $result = $service->assignTask((int) $params['task_id'], (int) $body['operator_id']);
            Response::success($result, 'Tarea asignada');
        } catch (\RuntimeException $e) {
            Response::error($e->getMessage());
        }
    }

    /**
     * POST /api/tasks/{task_id}/start
     */
    public static function start(array $params): void
    {
        try {
            $service = new WarehouseTaskService();
            $result = $service->startTask((int) $params['task_id'], AuthMiddleware::userId());
            Response::success($result, 'Tarea iniciada');
        } catch (\RuntimeException $e) {
            Response::error($e->getMessage());
        }
    }
}
