<?php

declare(strict_types=1);

namespace App\Repositories;

final class TauxTvaRepository extends BaseRepository
{
    public function all(): array
    {
        return $this->fetchAll(
            "SELECT *
             FROM taux_tva
             ORDER BY par_defaut DESC, actif DESC, taux DESC"
        );
    }

    public function allActive(): array
    {
        return $this->fetchAll(
            "SELECT *
             FROM taux_tva
             WHERE actif = 1
             ORDER BY par_defaut DESC, taux DESC"
        );
    }

    public function create(
        string $libelle,
        float $taux,
        int $parDefaut
    ): void {
        if ($parDefaut === 1) {
            $this->clearDefault();
        }

        $this->execute(
            "INSERT INTO taux_tva (
                libelle,
                taux,
                par_defaut,
                actif
            ) VALUES (
                :libelle,
                :taux,
                :par_defaut,
                1
            )",
            [
                'libelle' => trim($libelle),
                'taux' => $taux,
                'par_defaut' => $parDefaut,
            ]
        );
    }

    public function update(
        int $id,
        string $libelle,
        float $taux,
        int $parDefaut,
        int $actif
    ): void {
        if ($parDefaut === 1) {
            $this->clearDefault();
            $actif = 1;
        }

        $this->execute(
            "UPDATE taux_tva
             SET libelle = :libelle,
                 taux = :taux,
                 par_defaut = :par_defaut,
                 actif = :actif
             WHERE id = :id",
            [
                'id' => $id,
                'libelle' => trim($libelle),
                'taux' => $taux,
                'par_defaut' => $parDefaut,
                'actif' => $actif,
            ]
        );
    }

    public function setDefault(int $id): void
    {
        $this->clearDefault();

        $this->execute(
            "UPDATE taux_tva
             SET par_defaut = 1,
                 actif = 1
             WHERE id = :id",
            [
                'id' => $id,
            ]
        );
    }

    public function deactivate(int $id): void
    {
        $this->execute(
            "UPDATE taux_tva
             SET actif = 0,
                 par_defaut = 0
             WHERE id = :id",
            [
                'id' => $id,
            ]
        );
    }

    private function clearDefault(): void
    {
        $this->execute(
            "UPDATE taux_tva
             SET par_defaut = 0
             WHERE par_defaut = 1"
        );
    }
}