#!/usr/bin/perl

# $ENV{DBIC_TRACE}=1;
use strict;
use Data::Show;
use lib '/home/sites/clm.dmadelivers.com/www/clmapp/lib';
use CLMApp::Schema;
use DateTime;
use Text::CSV;
use POSIX;
use MIME::Lite;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
use File::Copy;
use DateTime;

my $dbix = CLMApp::Schema->connect("dbi:mysql:host=rds1.dmadelivers.com;db=dmaclm", 'dmaclm', '3lUz1OV2!',{unsafe=>1,RaiseError=>0,PrintError=>1});
my $path = '/tmp/';
my $csv = Text::CSV->new ( { binary => 1 } ) or die "Cannot use CSV: ".Text::CSV->error_diag ();
$csv->eol("\n");
my @header = ("Updated","Distributor","DCWarehouse","Activity","Status","DMAChainOwner","DMAChainConcept","DMAStoreID","DistCustomerNo","Address","City");
$csv->column_names(@header);	

&default;


sub default{

	my $dt = DateTime->now();
	my $datetime = $dt->iso8601();
	$datetime =~ s/T(.*)$//; $datetime =~ s/(-|:)//g; $datetime =~ s/\s+/_/g;

	my @distributors = $dbix->resultset('DistributorCompany')->search({ },{
		result_class=>'DBIx::Class::ResultClass::HashRefInflator',
	});
	my $distributors = {};
	foreach my $d (@distributors){
		$distributors->{ $d->{distributorcompanyid} } = $d;
	}

	my @distributorwarehouses = $dbix->resultset('DistributorWarehouse')->search({ },{
		result_class=>'DBIx::Class::ResultClass::HashRefInflator',
	});
	my $distributorwarehouses = {};
	foreach my $d (@distributorwarehouses){
		$distributorwarehouses->{ $d->{distributorcompanyid} } = $d;
	}


	my @customers = $dbix->resultset('Customer')->search({ 
			lastchangeddate => { '>=' => \'DATE_SUB(NOW(), INTERVAL 8 DAY)'}
		},{
		# prefetch => ['status','distributor','concept','chaingrp','chainunit','user','warehouse','orderflag','market','ordersystems','invoicesystems'],
		prefetch => ['status','distributor','concept','chaingrp','chainunit','user','warehouse','orderflag','market','ordersystems','invoicesystems'],		
		# columns => $columns,
		group_by => [qw/me.customerid/],
		order_by => [qw/me.customerid/],
		result_class=>'DBIx::Class::ResultClass::HashRefInflator',
	});

	my $changes = {};
	foreach my $cu (@customers){
# new, active edits, inactivated 
		if($cu->{lastchangeddate} eq $cu->{setupdate}){
			push(@{  $changes->{ $cu->{distributorcompanyid} }->{new} } , $cu);
			$cu->{activity} = "NEW";
		}elsif($cu->{statusid} == 1 && $cu->{lastchangeddate} ne $cu->{setupdate}){
			push(@{  $changes->{ $cu->{distributorcompanyid} }->{otheredit} } , $cu);
			$cu->{activity} = "OTHER EDIT";
		}elsif($cu->{statusid} == 2 && $cu->{lastchangeddate} ne $cu->{setupdate}){
			push(@{  $changes->{ $cu->{distributorcompanyid} }->{inactivated} } , $cu);
			$cu->{activity} = "INACTIVATED";
		}
	}

	my @res;

	my @keys = (qw/inactivated new otheredit/);
	
	my @dobjs;
	my $dobjs = {};

	foreach my $ch (@customers){
		next unless $ch->{activity};
		# 		my $dist = $distributors->{$did};
		# my $distware = $distributorwarehouses->{$did};
		my $dname = $ch->{distributor}->{name};
		$dname =~ s/\W/_/g;
		my $fname = 'DMAACTIVITY_' . quotemeta($dname) . '_' . $datetime;
		my $obj = {
			Updated => $ch->{lastchangeddate},
			Distributor => $ch->{distributor}->{name},
			DCWarehouse => $ch->{warehouse}->{distributorwarehousename},
			Activity => $ch->{activity},
			DMAChainOwner => $ch->{chaingrp}->{chaingroupname},
			DMAChainConcept => $ch->{concept}->{chainconceptname},
			DMAStoreID => $ch->{customerunitnumber},
			DistCustomerNo => $ch->{customernumber},
			Status => $ch->{statusid} == 1 ? 'Active' : 'Inactive',
			Address => $ch->{address},
			City => $ch->{city},
		};
		push(@{  $dobjs->{$fname}  },$obj);

	}


# 	foreach my $did (keys %$changes){
# 		# my $ch = $changes->{$did};
# 		my $dist = $distributors->{$did};
# 		my $distware = $distributorwarehouses->{$did};
# 		my $dname = $dist->{name};
# 		$dname =~ s/\W/_/g;
# 		my $fname = 'DMAACTIVITY_' . quotemeta($dname) . '_' . $datetime;
# 		foreach my $k (@keys){
# 			foreach my $ch (@{ $changes->{ $did }->{ $k } }){
# # my @header = ("Updated","Distributor","DCWarehouse","Activity","Status","DMAChainOwner","DMAChainConcept","DMAStoreID","DistCustomerNo","Address","City");				
# 					my $obj = {
# 						Updated => $ch->{lastchangeddate},
# 						Distributor => $dist->{name},
# 						DCWarehouse => $distware->{distributorwarehousename},
# 						Activity => uc($k),
# 						DMAChainOwner => $ch->{chaingrp}->{chaingroupname},
# 						DMAChainConcept => $ch->{concept}->{chainconceptname},
# 						DMAStoreID => $ch->{customerunitnumber},
# 						DistCustomerNo => $ch->{customernumber},
# 						Status => $ch->{statusid} == 1 ? 'Active' : 'Inactive',
# 						Address => $ch->{address},
# 						City => $ch->{city},
# 					};
# 					push(@{  $dobjs->{$fname}  },$obj);
# 			}
# 		} 
# 	}

# make CSV
	# show $dobjs;
	my $dfile = {};

	foreach my $do (keys %$dobjs){

		my $fname = $do . '.csv';
		my $fpath = $path . $fname;
		my $ddata = $dobjs->{$do};
# show $ddata;		
		# push(@{ $dfile->{$fname}}, $ddata);
		# foreach my $dd (@$ddata){
		# 	show $fname, $dd;
		# }
		open my $fhe, ">:encoding(utf8)", $fpath or die "$fpath: $!";
		print $fhe join(",", @header) . "\n";
		$csv->print_hr($fhe, $_) . "\n" foreach @$ddata;
		close $fhe or die "$fpath: $!"; 		


	}

# make EMAILS	

	foreach my $do (keys %$dobjs){

		my $fname = $do . '.csv';
		my $fpath = $path . $fname;
		my $dsubject = 'DMA CLM Weekly: ' . $do;
		$dsubject =~ s/_/ /g;

		# my $dt = DateTime->now();
		my $sdatetime = $dt->ymd('-'); # . ' ' . $dt->hms(':');
		my $subject = $dsubject;		
		my $msg = MIME::Lite->new(
			From     => 'root@dmadelivers.com',
			Cc => 'dma@ace4it.com',
			# To => 'dma@ace4it.com',
			To => 'opfftp@dmadelivers.com,CLMsupport@dmadelivers.com,matt.kot@dmadelivers.com',
		    Subject  => $subject,
			Type => 'multipart/mixed'
		);
		$msg->attach(
			Type     => 'text/plain',
			Data => $subject
		);
		$msg->attach(
			Type     => 'text/plain',
			# Type     => 'text/plain',
			# Type     => 'application/octet-stream',
			Path => $fpath,
		);			
		$msg->send;
	}

	# show \@dobjs;

	# show $changes;	

	# show @customers;
	# show scalar(@customers);

}