<?php
namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\components\TelegramHelper;
use app\models\Courier;

class TelegramController extends Controller
{
    public $enableCsrfValidation = false;

   public function actionWebhook()
{
    $data = json_decode(file_get_contents('php://input'), true);

    /** ===============================
     *  ОБРАБОТКА КНОПОК (callback_query)
     *  =============================== */
    if (isset($data['callback_query'])) {
        $callback = $data['callback_query'];
        $callbackId = $callback['id'];
        $chatId = $callback['message']['chat']['id'];
        $dataText = $callback['data']; // take_order_15

        if (strpos($dataText, 'take_order_') === 0) {
            $orderId = (int) str_replace('take_order_', '', $dataText);

            $courier = Courier::findOne(['telegram_id' => $chatId]);
            if (!$courier) {
                TelegramHelper::sendCallbackAnswer($callbackId, 'Курьер не найден');
                return 'ok';
            }

            $order = Order::findOne($orderId);
            if (!$order) {
                TelegramHelper::sendCallbackAnswer($callbackId, 'Заказ не найден');
                return 'ok';
            }

            if ($order->courier_id) {
                TelegramHelper::sendCallbackAnswer($callbackId, 'Заказ уже взят');
                return 'ok';
            }

            // Назначаем курьера
            $order->courier_id = $courier->id;
            $order->status = Order::STATUS_IN_PROGRESS;
            $order->save(false);

            $courier->status = Courier::STATUS_BUSY;
            $courier->save(false);

            TelegramHelper::sendCallbackAnswer($callbackId, 'Вы взяли заказ');
            TelegramHelper::sendMessage(
                $chatId,
                "✅ Вы взяли заказ #{$order->id}"
            );
        }

        return 'ok';
    }

    /** ===============================
     *  ОБРАБОТКА СООБЩЕНИЙ (/start)
     *  =============================== */
    if (!isset($data['message']['text'])) {
        return 'ok';
    }

    $text = trim($data['message']['text']);
    $chatId = $data['message']['chat']['id'];

    if (strpos($text, '/start') === 0) {
        $parts = explode(' ', $text);
        if (!isset($parts[1])) {
            TelegramHelper::sendMessage($chatId, 'Введите: /start <токен>');
            return 'ok';
        }

        $token = $parts[1];
        $courier = Courier::findOne(['telegram_token' => $token]);

        if (!$courier) {
            TelegramHelper::sendMessage($chatId, 'Токен не найден');
            return 'ok';
        }

        $courier->telegram_id = $chatId;
        $courier->save(false);

        TelegramHelper::sendMessage(
            $chatId,
            "Привет, {$courier->user->name}! Аккаунт привязан."
        );
    }

    return 'ok';
}
