<?php

interface IException
{
    /* Protected methods inherited from Exception class */

    public function getMessage();

                 // Exception message

    public function getCode();

                    // User-defined Exception code

    public function getFile();

                    // Source filename

    public function getLine();

                    // Source line

    public function getTrace();

                   // An array of the backtrace()

    public function getTraceAsString();

           // Formated string of trace

    /* Overrideable methods inherited from Exception class */

    public function __toString();

                 // formated string for display

    public function __construct($message = null, $code = 0);
}

abstract class CustomException extends Exception implements IException
{
    protected $message = 'Unknown exception';     // Exception message
    protected $code = 0;                       // User-defined exception code
    protected $file;                              // Source filename of exception
    protected $line;                              // Source line of exception

    public function __construct($message = null, $code = 0)
    {
        if (!$message) {
            throw new $this('Unknown '.get_class($this));
        }
        parent::__construct($message, $code);
    }

    public function __toString()
    {
        return get_class($this)." '{$this->message}' in {$this->file}({$this->line})\n"
        ."{$this->getTraceAsString()}";
    }
}

/*
 * Exception occurs when we have no active socket
 * connection to whatsapp
 */
class ConnectionException extends Exception
{
}

class LoginFailureException extends Exception
{
}
