<?php

use Gregwar\Captcha\CaptchaBuilder;
use Carbon\Carbon;

class CaptchaController extends BaseController
{
    public function generate()
    {
        $builder = new CaptchaBuilder;
        $builder->build();

        $inlineImage = $builder->inline();
        $answer = $builder->getPhrase();

        $random = new \Phalcon\Security\Random();

        // Clean up old captchas (expired at most NOW) with probability of ~10%
        if ($random->number(100) < 10) {
            $now = Carbon::now()->toDateTimeString();

            $this->db->delete('jaga.captchas', "expired_at < '$now'");
        }

        $captcha = new Captcha([
            'uuid' => $random->uuid(),
            'answer' => $answer,
            'expired_at' => Carbon::now()->addMinutes(5)->toDateTimeString(),
        ]);

        $captcha->save();

        return new SimpleResponse([
            'uuid' => $captcha->uuid,
            'inline_image' => $inlineImage
        ]);
    }

    // generate captcha untuk penghapusan akun user berdasarkan metode registrasi
    // jika registrasi socmed, maka mengembalikan key captcha
    // jika registrasi normal, maka mengembalikan key password
    public function generateForDeletion()
    {
        $this->checkIsAuthenticated();
        /** @var UmUser $user */
        $user = $this->shared->user;
        if ($user->isRegisBySocmed()) {
            $builder = new CaptchaBuilder;
            $builder->build();

            $inlineImage = $builder->inline();
            $answer = $builder->getPhrase();

            $random = new \Phalcon\Security\Random();

            // Clean up old captchas (expired at most NOW) with probability of ~10%
            if ($random->number(100) < 10) {
                $now = Carbon::now()->toDateTimeString();

                $this->db->delete('jaga.captchas', "expired_at < '$now'");
            }

            $captcha = new Captcha([
                'uuid' => $random->uuid(),
                'answer' => $answer,
                'expired_at' => Carbon::now()->addMinutes(5)->toDateTimeString(),
            ]);

            $captcha->save();

            $result = [
                'validation' => 'captcha',
                'additional' => [
                    'uuid' => $captcha->uuid,
                    'inline_image' => $inlineImage
                ]
            ];
        } else {
            $result = [
                'validation' => 'password',
                'additional' => null
            ];
        }

        return new SimpleResponse($result);
    }
}
