<?php

class reportsController extends Staple_Controller
{
    private $authLevel;
    private $uid;

    public function _start()
    {
        $this->_setLayout('main');
        $auth = Staple_Auth::get();
        $this->authLevel = $auth->getAuthLevel();
        $user = new userModel();
        $this->uid = $user->getId();
        if ($this->authLevel < 500) {
            header("location:" . $this->_link(array('index', 'index')) . "");
        }
    }

    public function index($year = null, $month = null)
    {
        if ($year == null) {
            $year = date('Y');
        }

        if ($month == null) {
            $month = date('m');
        }

        $report = new reportModel($year, $month);
        $this->view->report = $report->getTimesheets();

        $timesheet = new timesheetModel($year, $month);
        $this->view->nextMonth = $timesheet->getNextMonth();
        $this->view->previousMonth = $timesheet->getPreviousMonth();
        $this->view->year = $timesheet->getCurrentYear();
        $yearForm = new changeYearForm();
        $yearForm->setAction($this->_link(array('reports','changeyear')));
        $this->view->yearForm = $yearForm;

        $this->view->accountLevel = $this->authLevel;

        $date = new DateTime();
        $date->setDate($year, $month, 1);
        $this->view->month = $date->format('F');

        $printTimeSheetForm = new printTimeSheetForm();
        if($printTimeSheetForm->wasSubmitted())
        {
            $printTimeSheetForm->addData($_POST);
            if($printTimeSheetForm->validate())
            {
                $data = $printTimeSheetForm->exportFormData();

                $this->layout->addScriptBlock("
                    window.open('".$this->_link(array("reports","printpreview",$year,$month,$data['account']))."');
                    ");
                $this->view->printTimeSheetForm = $printTimeSheetForm;
            }
            else
            {
                $this->view->printTimeSheetForm = $printTimeSheetForm;
            }
        }
        else
        {
            $this->view->printTimeSheetForm = $printTimeSheetForm;
        }
    }

    public function changeyear()
    {
        $form = new changeYearForm();
        if($form->wasSubmitted())
        {
            $form->addData($_POST);
            if($form->validate())
            {
                $data = $form->exportFormData();
                header("location: ".$this->_link(array('reports',$data['year']))."");
            }
            else
            {
                header("location: ".$this->_link(array('reports'))."");
            }
        }
        else
        {
            header("location: ".$this->_link(array('reports'))."");
        }
    }

    public function weekly()
    {
        //Weekly report form
        $form = new weeklyReportForm();

        if ($form->wasSubmitted()) {
            $form->addData($_POST);
            if ($form->validate()) {
                $data = $form->exportFormData();
                $report = new weeklyReportModel();
                $this->view->report = $report->timeWorked($data['account'], $data['year']);

                $account = new userModel();
                $this->view->account = $account->userInfo($data['account']);

                $this->view->year = $data['year'];
            } else {
                $this->view->form = $form;
            }
        } else {
            $this->view->form = $form;
        }
    }

    public function unlock()
    {
        $auth = Staple_Auth::get();
        $this->authLevel = $auth->getAuthLevel();
        if ($this->authLevel < 900)
        {
            header("location:" . $this->_link(array('index', 'index')) . "");
        }
        else
        {

            $year = date('Y');
            $month = date('m');

            $timesheets = new reportModel($year, $month);

            $this->view->accounts = $timesheets;
        }
    }

    public function unlockid($id)
    {
        $auth = Staple_Auth::get();
        $this->authLevel = $auth->getAuthLevel();

        if ($this->authLevel < 900)
        {
            header("location:" . $this->_link(array('index', 'index')) . "");
        }
        else
        {
            $unlock = new unlockModel();

            if ($unlock->unlock($id))
            {
                $this->view->message = "<i class='fa fa-check'></i> Time entry unlocked.";
            }
            else
            {
                $this->view->message = "<i class='fa fa-close'></i> ERROR: Unable to unlock your own time entries.";
            }
        }
    }

    public function printpreview($year,$month,$uid)
    {
        $this->_setLayout('print');

        $user = new userModel();
        $account = $user->userInfo($uid);

        $this->view->firstName = $account['firstName'];
        $this->view->lastName = $account['lastName'];
        $this->view->batchId = $account['batchId'];
        $this->view->year = $year;
        $this->view->month = date('F',$month);


        $timesheet = new timesheetModel($year, $month,$uid);
        $this->view->timesheet = $timesheet;

    }

    public function payperiod($year = null, $month = null)
    {
        if ($year == null) {
            $year = date('Y');
        }

        if ($month == null) {
            $month = date('m');
        }

        $this->view->year = $year;

        $date = new DateTime();
        $date->setDate($year,$month,26);
        $date->setTime(0,0,0);
        $date->modify('-1 month');
        $this->view->previousMonth = $date->format('m');

        $date2 = new DateTime();
        $date2->setDate($year,$month,25);
        $date2->setTime(24,0,0);

        $interval = date_diff($date,$date2);

        $this->view->span = $interval->days;

        echo $date->format('Y-m-d');


        $reports = new reportModel($year, $month);
        $this->view->report = $reports->payPeriodTotals($year, $month);

    }
}