<?php

declare(strict_types=1);

require_once __DIR__ . DIRECTORY_SEPARATOR . 'ApiFrontController.php';
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'Cgv.php';
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'CgvCustomer.php';

class MyvetshopcliniqueCgvModuleFrontController extends ApiFrontController
{
    /**
     * Assign template vars related to page content
     *
     * @see FrontController::initContent()
     */
    public function initContent(): void
    {
        parent::initContent();

        if (!$this->context->customer->id) {
            header('HTTP/1.0 401 Unauthorized');
            exit();
        }

        try {
            $db = Db::getInstance();
            $cgv_customer_id = $db->getValue('SELECT `id_myvetshop_cgv_customer` FROM `ps_myvetshop_cgv_customer` WHERE `id_customer` = ' . (int) $this->context->customer->id);
            $last_cgv_id = $db->getValue('SELECT `id_myvetshop_cgv` FROM `ps_myvetshop_cgv` ORDER BY `date_add` DESC');
            $last_cgv = new Cgv((int) $last_cgv_id);

            if ($cgv_customer_id) {
                $cgv_customer = new CgvCustomer((int) $cgv_customer_id);
            } else {
                $cgv_customer = new CgvCustomer();
                $cgv_customer->id_customer = (int) $this->context->customer->id;

                $cgv_customer->add();
            }

            if ('POST' == $_SERVER['REQUEST_METHOD']) {
                // Mise à jour
                $accept_version = Tools::getValue('accept_version');
                $id_cgv = $db->getValue('SELECT `id_myvetshop_cgv` FROM `ps_myvetshop_cgv` WHERE `version` = "' . $db->escape($accept_version) . '"');

                if (!$id_cgv) {
                    header('HTTP/1.0 400 Bad Request');
                    exit();
                }

                $cgv_customer->id_cgv_accepte = (int) $id_cgv;
                $cgv_customer->date_acceptation = date('Y-m-d H:i:s');
                $cgv_customer->ip_acceptation = Tools::getRemoteAddr();

                $cgv_customer->save();
            }

            echo json_encode(
                [
                    'id' => $cgv_customer->id_myvetshop_cgv_customer,
                    'id_customer' => $cgv_customer->id_customer,
                    'accept_version' => $cgv_customer->id_cgv_accepte ? (new Cgv($cgv_customer->id_cgv_accepte))->version : null,
                    'current_version' => $last_cgv->version,
                    'current_cgv' => $last_cgv->texte,
                    'date_acceptation' => $cgv_customer->date_acceptation,
                ], JSON_PRETTY_PRINT
            );
            exit();
        } catch (PrestaShopDatabaseException $e) {
            // Inhibiteur d'erreur
        } catch (PrestaShopException $e) {
            // Inhibiteur d'erreur
        }

        header('HTTP/1.0 500 Internal Server Error');
        exit();
    }
}
