#!/usr/bin/perl

$ENV{DBIC_TRACE}=1;
use JSON;
use strict;
use Data::Show;
use lib '/home/sites/clm.dmadelivers.com/www/clmapp/lib';
use CLMApp::Schema;
use CLMApp;
my $c = new CLMApp;
my $dbix = CLMApp::Schema->connect("dbi:mysql:host=rds1.dmadelivers.com;db=dmaclm", 'dmaclm', '3lUz1OV2!',{unsafe=>1,RaiseError=>0,PrintError=>1});
no warnings 'uninitialized';
if($ARGV[0] eq 'monthly'){
	&default({
		'me.statusid'=>1, 
		'me.customerid' => 1054300
	});
}else{
	&default({
#		'me.active'=>1,
		'me.statusid' => 1,
	 	'-or' => {
			'me.latitude' => 0,
			'me.longitude' => 0,
			'me.distancetodistcenter' => 0
		},
#		'me.customerid' =>  1016881,
#		'me.unitname' => { 'like' => '%qdoba%' }
#		'me.chaingroupid' => 107

		});
}



sub default{
	my @rows;
	my $search = shift;

# id => $dbix->resultset('Component')->auto_pk()
	my @r = $dbix->resultset('Customer')->search($search,{prefetch => ['status','distributor','chaingrp','concept','user','warehouse','orderflag','country'], 
#		length => 10, 
#		page => 1,
		result_class=>'DBIx::Class::ResultClass::HashRefInflator',
	});

# show @r;	
	# show @p;

	my @w = $c->db->resultset('DistributorWarehouse')->search({},{result_class=>'DBIx::Class::ResultClass::HashRefInflator'});
	my %warehouses;
	foreach my $w (@w){
		$warehouses{ $w->{distributorwarehouseid} } = $w;
	}

	my @err;
	foreach my $r (@r){
		my $j = {};

		# my $add = join(", ", ($r->{address}, $r->{city}, $r->{state}, $r->{zip}, $r->{countrycode}) );
		my $add = join(", ", ($r->{city}, $r->{state}, $r->{zip}, $r->{countrycode}) );
		if($r->{address} =~ /p\.?o\.?\s+box/i){
			$add = join(", ", ( $r->{city}, $r->{state}, $r->{zip}, $r->{countrycode} ) );
		}

		($j->{latitude},$j->{longitude}) = $c->gpslatlon($add);
show $add, $j;

		my $w = $warehouses{$r->{distributorwarehouseid}};
		my $d = join(", ", ($w->{address}, $w->{cityname}, $w->{state}, $w->{zip}, $w->{countrycode}) );
		if($w->{address} =~ /p\.?o\.?\s+box/i){
			$d = join(", ", ($w->{cityname}, $w->{state}, $w->{zip}, $w->{countrycode}) );
		}
		show $d;
		if($w->{zip}){
			#v$j->{distancetodistcenter} = $c->gpslatlon($add,$d) || 0;
			$j->{distancetodistcenter} = $c->gpslatlon($r->{zip},$w->{zip}) || 0;
		}
show $r, $j;
		if($j->{distancetodistcenter} ne ""){

			my $ustmt = sprintf('UPDATE Customer SET distancetodistcenter = %f, latitude = %f, longitude = %f WHERE ( customerid = %d );', $j->{distancetodistcenter}, $j->{latitude}, $j->{longitude}, $r->{customerid});
			# show $ustmt;
			print $ustmt . "\n";


			$j->{longitude} ||= 0;
			$j->{latitude} ||= 0;
			$j->{distancetodistcenter} ||= 0;
show $j;
			$c->db->resultset('Customer')->by_id($r->{customerid})->update($j);
# UPDATE Customer SET distancetodistcenter = ?, latitude = ?, longitude = ? WHERE ( customerid = ? ): '0', '0', '0', '1055535'


		}else{
			push(@err,$r);
		}
	}
	foreach my $err (@err){
		show {
			customerid => $err->{customerid},
			unitname => $err->{unitname},
			address => join(',', $err->{address},$err->{city},$err->{state},$err->{zip}),
		};

	}
#	show @err;

}
