use base ("Understand::Codecheck");
use strict;
use Codecheck::Libraries::NamingConventions;

my $kind = "Package";
my $kindPlural ="Packages";
my $languageText = "Ada";
my $languageTest = "Ada";
my $canChangePrecedence = 1;
my $defaultAll =1;
my @kindStrings= qw(Generic Local);
my %kindNameLookup= ();

sub check {
  my ($check,$file) =@_;
  return unless $file->kind->check("file");
  setlib();
  
  foreach my $varRef ($file->filerefs("body declare","Ada Package ~unknown ~unresolved",1)){
    my $var = $varRef->ent;
    
    #Build the list of Kinds for this variable
    my $kindString = $var->kind->longname();
    
    my $varkindNameArray = getPrimaryKind($check,$kindString);
    
    my $errors = checkNamingRules($var->name,$varkindNameArray,$check);
    $check->violation($var,$file,$varRef->line(),$varRef->column,NAMEERROR,$Codecheck::Libraries::NamingConventions::kindNameLookup{$varkindNameArray},$var->name,$errors) if $errors;
  }
}

#Template code, do not modify below this line
sub setlib{
    @Codecheck::Libraries::NamingConventions::kindStrings = @kindStrings;
    %Codecheck::Libraries::NamingConventions::kindNameLookup = %kindNameLookup;
    setOptions($kind,$kindPlural,$languageText,$languageTest,$canChangePrecedence,$defaultAll);
}
sub register_tr_text {registerNamingErrors(shift);}
sub name {setlib; return "Naming Convention: $kindPlural";}
sub description {setlib;return "Define naming convention for $languageText $kindPlural";}
sub detailed_description { setlib;return getNamingDescription();}
sub test_language { setlib;return shift eq $languageTest;}
sub define_options{ setlib;setNamingOptions(shift);}
sub test_entity { return 1;}
sub test_global { return 0;}