<?php
namespace WorkbloomERP\Module\v0\Usuario\Repos;

use DateTimeImmutable;
use WorkbloomERP\Services\DBService;
use WorkbloomERP\Module\v0\Usuario\Models\UsuarioEmpresaModel;

class UsuarioEmpresaRepo {
    protected string $usuarioEmpresaTable = 'shared.usuario_empresa';

    public function __construct(
        private DBService $db
    ) {}

    public function insert(UsuarioEmpresaModel $usuarioEmpresaModel): bool {
        $query = 
        "INSERT INTO {$this->usuarioEmpresaTable} (
            usuario_id,
            empresa_id
        ) VALUES (
            :usuario_id,
            :empresa_id
        )";

        return $this->db->execute(
            sql: $query,
            params: [
                'usuario_id' => $usuarioEmpresaModel->getUsuarioId(),
                'empresa_id' => $usuarioEmpresaModel->getEmpresaId()
            ]
        );
    }

    public function delete(UsuarioEmpresaModel $usuarioEmpresaModel): bool {
        $query = 
        "DELETE FROM {$this->usuarioEmpresaTable} WHERE usuario_id = :usuario_id AND empresa_id = :empresa_id";

        return $this->db->execute(
            sql: $query,
            params: [
                'usuario_id' => $usuarioEmpresaModel->getUsuarioId(),
                'empresa_id' => $usuarioEmpresaModel->getEmpresaId()
            ]
        );
    }

    public function findAllByUsuarioId(int $usuario_id): array {
        $query = 
        "SELECT
            usuario_id,
            empresa_id
        FROM {$this->usuarioEmpresaTable}
        WHERE usuario_id = :usuario_id";

        return $this->db->fetchAll(
            sql: $query,
            params: [
                'usuario_id' => $usuario_id
            ]
        );
    }

    public function checkAssociationByUsuarioIdAndEmpresaId(int $usuario_id, int $empresa_id): bool {
        $query = 
        "SELECT 1 FROM {$this->usuarioEmpresaTable} WHERE usuario_id = :usuario_id AND empresa_id = :empresa_id";

        $result = $this->db->fetchOne(
            sql: $query,
            params: [
                'usuario_id' => $usuario_id,
                'empresa_id' => $empresa_id
            ]
        );

        return !empty($result);
    }
}