<?php

namespace App\Exceptions;

use RuntimeException;
use Throwable;

class SongUploadFailedException extends RuntimeException
{
    private static function fromThrowable(Throwable $e): self
    {
        return new self($e->getMessage(), $e->getCode(), $e);
    }

    private static function fromErrorMessage(?string $error): self
    {
        return new self($error ?? 'An unknown error occurred while uploading the song.');
    }

    public static function make(Throwable|string $error): self
    {
        if ($error instanceof Throwable) {
            return self::fromThrowable($error);
        }

        return self::fromErrorMessage($error);
    }
}