use 5.010001;
use strict;
use warnings;

package Mite::Miteception;

our $AUTHORITY = 'cpan:TOBYINK';
our $VERSION   = '0.012000';

use Import::Into;
use Mite::Shim ();
use Mite::Types ();

sub import {
	'Mite::Types'->import::into( 1, qw( -types slurpy ) );

	if ( Mite::Shim::_is_compiling() and defined $Mite::REAL_FILENAME ) {
		my $class = shift;
		my %arg = map { lc($_) => 1 } @_;
		my ( $caller, $file ) = caller;
		require Mite::Project;
		Mite::Project->default->inject_mite_functions(
			 package     => $caller,
			 file        => $Mite::REAL_FILENAME,
			 arg         => \%arg,
			 kind        => ( $arg{'-role'} ? 'role' : 'class' ),
			 shim        => 'Mite::Shim',
		);
	}
	else {
		goto \&load_mite_file;
	}
}

# Stolen bits from Mite::Shim
sub load_mite_file {
	my $class = shift;
	my %arg = map { lc($_) => 1 } @_;

	my ( $caller, $file ) = caller;
	my $mite_file = $file . ".mite.pm";

	if( !-e $mite_file ) {
		 require Carp;
		 Carp::croak("Compiled Mite file ($mite_file) for $file is missing");
	}

	{
		 local @INC = ('.', @INC);
		 require $mite_file;
	}
}

1;