#ifndef _CCOLLISION_HPP_
#define _CCOLLISION_HPP_

/*** SDL Header Files ***/
#include <SDL.h>

/*** DLL Header File ***/
#include "dllExport.h"

/*** Custom Header File ***/
#include "Vector/Vector2.hpp"
#include "iVector/iVector2.hpp"

#include "Vector/Vector4.hpp"
#include "iVector/iVector4.hpp"

namespace MathEngine {
	class EXPORT_FROM_MYDLL cCollision
	{
	private:
		cCollision();
		~cCollision();

	public:
		/// Functions
		/* returns true if a is touching b */
		static const bool BoundingBox( const SDL_Rect& a, const SDL_Rect& b );
		/* returns true if a is touching b */
		static const bool BoundingBox( const Vector4& a, const Vector4& b );
		/* returns true if a is touching b */
		static const bool BoundingBox(const iVector4& a, const iVector4& b);

		/* returns true if a is touching b */
		static const bool BoundingBox( const SDL_Rect& a, const Vector4& b );
		/* returns true if a is touching b */
		static const bool BoundingBox( const Vector4& a, const SDL_Rect& b );
		/* returns true if a is touching b */
		static const bool BoundingBox( const SDL_Rect& a, const iVector4& b );
		/* returns true if a is touching b */
		static const bool BoundingBox( const iVector4& a, const SDL_Rect& b );
		/* returns true if a is touching b */
		static const bool BoundingBox( const iVector4& a, const Vector4& b );
		/* returns true if a is touching b */
		static const bool BoundingBox( const Vector4& a, const iVector4& b );
		
		/* returns the Vector2 were a over laps b */
		static const Vector2 Inside( const Vector4& a, const Vector4& b );
		/* returns the Vector2 were a over laps b */
		static const Vector2 Inside( const SDL_Rect& a, const Vector4& b  );
		/* returns the Vector2 were a over laps b */
		static const Vector2 Inside( const Vector4& a, const SDL_Rect& b );

		/* returns true if xy are inside SDL_Rect */
		static const bool isInside( const signed long int x, const signed long int y, const SDL_Rect& inside );
		/* returns true if xy are inside iVector4 */
		static const bool isInside( const signed long int x, const signed long int y, const iVector4& inside );
		
		/* returns the iVector2 were a over laps b */
		static const iVector2 Inside(const SDL_Rect& a, const SDL_Rect& b);
		/* returns the iVector2 were a over laps b */
		static const iVector2 Inside( const iVector4& a, const iVector4& b );
		/* returns the iVector2 were a over laps b */
		static const iVector2 Inside( const SDL_Rect& a, const iVector4& b );
		/* returns the iVector2 were a over laps b */
		static const iVector2 Inside( const iVector4& a, const SDL_Rect& b );

		static const Vector2 Inside( const iVector4& a, const Vector4& b );
		static const Vector2 Inside( const Vector4& a, const iVector4& b );
	};/// END CLASS DEFINITION cCollision
}/// END NAMESPACE DEFINITION MathEngine
#endif/// END IFNDEF _CCOLLISION_HPP_
