<?php

namespace kernel\app_modules\tgbot\controllers;

use app\modules\tgbot\models\Tgbot;
use JetBrains\PhpStorm\NoReturn;
use kernel\app_modules\card\models\Card;
use kernel\app_modules\card\models\forms\CreateCardForm;
use kernel\app_modules\card\services\CardService;
use kernel\helpers\Debug;
use kernel\modules\user\models\forms\CreateUserForm;
use kernel\modules\user\service\UserService;
use kernel\Request;
use kernel\RestController;
use kernel\services\TokenService;

class TgBotRestController extends RestController
{

    public function __construct()
    {
        $this->model = new Tgbot();
    }

    #[NoReturn] public function actionStore(): void
    {
        $request = new Request();
        $data = $request->post();

        $tgBot = $this->model->where("bot_id", $data['bot_id'])->where("dialog_id", $data['dialog_id'])->first();

        if (!$tgBot) {
            foreach ($this->model->getFillable() as $item) {
                $this->model->{$item} = $data[$item] ?? null;
            }

            $userService = new UserService();
            $userForm = new CreateUserForm();
            $username = $data['username'];
            $userForm->load([
                'username' => $username,
                'password' => TokenService::random_bytes(20),
                'email' => $username . "@hookahdnr.ru"
            ]);

            $user = $userService->create($userForm);
            if ($user) {
                $this->model->user_id = $user->id;
            }

            $this->model->save();

            $resArr = $this->model->toArray();

            $cardService = new CardService();
            $cardForm = new CreateCardForm();
            $cardForm->load([
                'user_id' => $user->id,
                'username' => $username,
                'card_template_id' => 105545,
                'status' => 1,
            ]);
            $cardService->create($cardForm);

            $this->renderApi($resArr);
        }
        $resArr = $tgBot->toArray();

        $this->renderApi($resArr);
    }

    #[NoReturn] public function actionCreateCard(): void
    {
        $cardService = new CardService();
        $request = new Request();
        $data = $request->post();
        $form = new CreateCardForm();
        $form->load($data);
        $form->setItem('payment_type', 2);
        $form->setItem('bank_id', 323);
        $form->setItem('info', 42);
        $form->setItem('program', 71);
        $form->setItem('cvc', 101);
        $form->setItem('pin', 1111);
        $form->setItem('status', 1);

        if ($form->validate()) {
            $model = $cardService->create($form);

            $this->renderApi($model->load(['cardFile'])->toArray());
        }

        $this->renderApi([]);
    }

    #[NoReturn] public function actionGetByDialog(int $dialog_id, int $bot_id): void
    {
        $model = \kernel\app_modules\tgbot\models\Tgbot::where(['dialog_id' => $dialog_id, 'bot_id' => $bot_id])->first();
        if ($model) {
            $this->renderApi($model->toArray());
        }
        $this->renderApi([]);
    }

    #[NoReturn] public function actionGetCardByDialog(int $dialog_id, int $bot_id): void
    {
        $model = \kernel\app_modules\tgbot\models\Tgbot::where(['dialog_id' => $dialog_id, 'bot_id' => $bot_id])->first();
        if ($model) {
            $card = Card::where("user_id", $model->user_id)->first();
            if ($card) {
                $this->renderApi($card->load('cardFile')->toArray());
            }
        }
        $this->renderApi([]);
    }

}