#!/usr/bin/perl

use strict;
use DBI;
my $dbh = DBI->connect("dbi:SQLite:dbname=hlr.sqlite3","","");


my %mcc_names;
my %mcc_mnc_names;

sub read_networks($)
{
	my $filename = shift;
	my $cur_name;

	open(INFILE, $filename);
	while (my $l = <INFILE>) {
		chomp($l);
		if ($l =~ /^#/) {
			next;
		}
		if ($l =~ /^\t/) {
			my ($mcc, $mnc, $brand, $r) = split(' ', $l, 4);
			#printf("%s|%s|%s\n", $mcc, $mnc, $brand);
			$mcc_mnc_names{"$mcc-$mnc"} = $brand;
			$mcc_names{$mcc} = $cur_name;
		} elsif ($l =~ /^(\w\w)\t(.*)/) {
			#printf("%s|%s\n", $1, $2);
			$cur_name = $2;
		}
	}
	close(INFILE);
}

read_networks("networks.tab");

my %oper_count;
my %country_count;

my $sth = $dbh->prepare("SELECT imsi FROM subscriber");

$sth->execute();

while (my $href = $sth->fetchrow_hashref) {
	my ($mcc, $mnc) = $$href{imsi} =~ /(\d{3})(\d{2}).*/;
	#printf("%s %s-%s \n", $$href{imsi}, $mcc, $mnc);
	$oper_count{"$mcc-$mnc"}++;
	$country_count{$mcc}++;
}


foreach my $c (keys %country_count) {
	printf("%s: %d\n", $mcc_names{$c}, $country_count{$c});
}
	foreach my $k (keys %oper_count) {
		printf("\t%s: %d\n", $mcc_mnc_names{$k}, $oper_count{$k});
	}
#//}
