<?php

class Product extends ProductCore
{
    /**
     * Indique si un produit a une vente restreinte ou non
     *
     * @return string|false "dietetique" "rurale" ou false
     */
    public function getVenteRestreinte()
    {
        return Db::getInstance(false)
            ->getValue(
                'SELECT pfvl.value'
                . ' FROM ps_feature_product pfp'
                . ' INNER JOIN ps_feature_value pfv ON pfv.id_feature_value = pfp.id_feature_value'
                . ' INNER JOIN ps_feature_value_lang pfvl ON pfvl.id_feature_value = pfv.id_feature_value AND pfvl.id_lang = 1'
                . ' INNER JOIN ps_feature_lang pfl ON pfl.id_feature = pfv.id_feature AND pfl.id_lang = 1'
                . ' WHERE pfp.id_product = ' . (int) $this->id . ' AND pfl.name = "Achat Restreint"'
            );
    }

    public function canUserBuy($customer = null): bool
    {
        require_once _PS_MODULE_DIR_ . 'myvetshopclinique' . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'Clinique.php';

        $venteRestreinte = $this->getVenteRestreinte();

        if (!$venteRestreinte) {
            return true;
        }

        if (!$customer) {
            $customer = Context::getContext()->customer;
        }

        // Les achats restreints ne sont pas disponibles pour les personnes non connectées
        if (!$customer) {
            return false;
        }
        // Si le client n'est relié à aucune clinique, alors il ne peut pas commander de produit restreint
        $clinique_id = Clinique::getCliniqueIdByGroup($customer->id_default_group);
        if (!$clinique_id) {
            return false;
        }
        $clinique = new Clinique($clinique_id);

        switch ($venteRestreinte) {
            case 'rurale':
                $group = new Group($customer->id_default_group);
                if ('-pro' !== substr($group->name[Context::getContext()->language->id], -4)) {
                    return false;
                }

                return boolval($clinique->rurale);

            default:
                // Le simple fait d'avoir une clinique suffit à commander
                return true;
        }
    }
}
