<?php

namespace Doctrine\Tests\Mocks;

use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Driver;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Schema\AbstractSchemaManager;
use Throwable;

class DriverMock implements Driver
{
    /** @var DatabasePlatformMock */
    private $platformMock;

    /** @var AbstractSchemaManager */
    private $schemaManagerMock;

    /**
     * {@inheritDoc}
     */
    public function connect(array $params, $username = null, $password = null, array $driverOptions = [])
    {
        return new DriverConnectionMock();
    }

    public function getDatabasePlatform()
    {
        if (! $this->platformMock) {
            $this->platformMock = new DatabasePlatformMock();
        }
        return $this->platformMock;
    }

    public function getSchemaManager(Connection $conn)
    {
        if ($this->schemaManagerMock === null) {
            return new SchemaManagerMock($conn);
        }

        return $this->schemaManagerMock;
    }

    public function setDatabasePlatform(AbstractPlatform $platform)
    {
        $this->platformMock = $platform;
    }

    public function setSchemaManager(AbstractSchemaManager $sm)
    {
        $this->schemaManagerMock = $sm;
    }

    public function getName()
    {
        return 'mock';
    }

    public function getDatabase(Connection $conn)
    {
        return;
    }

    public function convertExceptionCode(Throwable $exception)
    {
        return 0;
    }
}