<?php
/** @license MIT
 * Copyright 2017 J. King, Dustin Wilson et al.
 * See LICENSE and AUTHORS files for details */

declare(strict_types=1);
namespace JKingWeb\Arsse\Db\MySQL;

use JKingWeb\Arsse\Db\Exception;
use JKingWeb\Arsse\Db\ExceptionInput;
use JKingWeb\Arsse\Db\ExceptionTimeout;

trait ExceptionBuilder {
    public static function buildEngineException($code, string $msg): array {
        switch ($code) {
            case 1205:
                return [ExceptionTimeout::class, 'general', $msg];
            case 1364:
                return [ExceptionInput::class, "engineConstraintViolation", $msg];
            case 1366:
                return [ExceptionInput::class, 'engineTypeViolation', $msg];
            default:
                return [Exception::class, 'engineErrorGeneral', $msg];
        }
    }

    public static function buildConnectionException($code, string $msg): array {
        switch ($code) {
            case 1045:
            // @codeCoverageIgnoreStart
            case 1043:
            case 1044:
            case 1046:
            case 1049:
            case 2001:
            case 2002:
            case 2003:
            case 2004:
            case 2005:
            case 2007:
            case 2009:
            case 2010:
            case 2011:
            case 2012:
            case 2015:
            case 2016:
            case 2017:
            case 2018:
            case 2026:
            case 2028:
            // @codeCoverageIgnoreEnd
                return [Exception::class, 'connectionFailure', ['engine' => "MySQL", 'message' => $msg]];
            default:
                return [Exception::class, 'engineErrorGeneral', $msg]; // @codeCoverageIgnore
        }
    }
}