#!/usr/bin/perl

use strict;
use warnings;
use FindBin qw( $Bin );
use lib "$Bin/../../lib";
use Date::Calc qw( Date_to_Time Delta_Days Add_Delta_Days Today );
use App::POS::Config;
use App::POS::Machine::Station;
use App::POS::Machine::Server;
use POSIX qw( strftime );
use Data::Dumper;

my $cfg = App::POS::Config->new( file => "/opt/pos/etc/config.ini" );
my $info = $cfg->load_fixed();

my $machine = undef;

if (exists $info->{STATION_NUMBER} && $info->{STATION_NUMBER} > 0) {
  $machine = App::POS::Machine::Station->new( config => $cfg );  
}
else {
  $machine = App::POS::Machine::Server->new( config => $cfg );  
}

my $CLOSE_HOUR = $cfg->{END_BUSINESS_HOUR} || "05:00";

if ($CLOSE_HOUR =~ /^\d+:\d+$/) {
  $CLOSE_HOUR = $CLOSE_HOUR.":00";
}

my $time_str = &strftime("%Y-%m-%d %H:%M:%S", localtime);
#$time_str = "2011-02-14 01:34:00";
my $business_date = &_date_based_on_closing_hour($time_str, $CLOSE_HOUR);

print $business_date;

sub _date_based_on_closing_hour {
  my $sale_date = shift;
  my $closing   = shift;

  $closing = $closing->[0] if ref($closing);

  my( $y, $m, $d, $h, $mi, $s ) = $sale_date =~ /^(\d+)\-(\d+)\-(\d+) (\d+):(\d+):(\d+)$/;

  my $close = "$y-$m-$d $closing";
  my( $y2, $m2, $d2, $h2, $mi2, $s2 ) = $close =~ /^(\d+)\-(\d+)\-(\d+) (\d+):(\d+):(\d+)$/;

  my $sale_time  = &Date_to_Time( $y, $m, $d, $h, $mi, $s );
  my $close_time = &Date_to_Time( $y2, $m2, $d2, $h2, $mi2, $s2 );

  my $diff = $sale_time - $close_time;

  if ($h2 >= 12) {
    if ($diff > 0) {
      $sale_date =~ s/\s+.*?$//;
      return $sale_date;
    } else {
      #my( $year, $month, $day ) = $sale_date =~ /^(\d+)\-(\d+)\-(\d+)/;
      my ($fy, $fm, $fd) = Add_Delta_Days($y, $m, $d, -1);
      return "$fy-$fm-$fd";
    }
  } else {
    if ($diff > 0) {
      $sale_date =~ s/\s+.*?$//;
      return $sale_date;
    } else {
      my ($fy, $fm, $fd) = Add_Delta_Days($y, $m, $d, -1);
      return "$fy-$fm-$fd";
    }
  }

  $sale_date =~ s/\s+.*?$//;
  return $sale_date;
}

