<?php

namespace app\Helpers;
use PDF;
use Mail;
use App\Mail\ReportMail;
use App\Models\Settings\Configuration;
use App\Models\Settings\State;
use App\Models\Facility\Facility;
use App\Models\Sales\Ticket;
use App\Models\Sales\ReportData;

/**
* class MSG91 to send SMS on Mobile Numbers.
* @author Shashank Tiwari
*/
class ReportClass {

    function __construct() {
       
    }

    public function facility_schedule_report()
    {
        $date_from = date("Y-m-d");
        $date_to = date("Y-m-d");
        $ticket_date = date("Y-m-d");
        $ticket_array = [];
        ////facility report//////////////////
        $ticket_date_arr[] = $ticket_date;
        $ticket_count = Ticket::where('status',1)->whereDate('show_date',$ticket_date)->count();
        $adult_count = Ticket::where('status',1)->whereDate('show_date',$ticket_date)->sum('noof_adult');
        $child_count = Ticket::where('status',1)->whereDate('show_date',$ticket_date)->sum('noof_child');
        $totalamount = Ticket::where('status',1)->whereDate ('show_date',$ticket_date)->sum('amount');
        $minimum_ticket_num =  Ticket::where('status',1)->whereDate('show_date',$ticket_date)->min('ticket_no');
        $maximum_ticket_num =  Ticket::where('status',1)->whereDate('show_date',$ticket_date)->max('ticket_no');
        $ticket_number = $minimum_ticket_num." - ".$maximum_ticket_num;
        $ticket_facility_arr = Ticket::with('facility')->where('status',1)->whereDate('show_date',$ticket_date)->first();

        if($ticket_count!=0)
        {
            $ticket_array[$ticket_date]['organisation_name'] = $ticket_facility_arr->facility->organisation_name;
            $ticket_array[$ticket_date]['facility_name'] = $ticket_facility_arr->facility->facility_name;
            $ticket_array[$ticket_date]['nooftickets'] = $ticket_count;
            $ticket_array[$ticket_date]['noofadults'] = $adult_count;
            $ticket_array[$ticket_date]['noofchildren'] = $child_count;
            $ticket_array[$ticket_date]['totalamount'] = $totalamount;
            $ticket_array[$ticket_date]['ticketnumber'] = $ticket_number;
        }
        ////////////////////////////////////////////////////

        //////detailed report////////////////////////
        $detailed_report_arr =[];
        $detailed_report_arr[$ticket_date] = Ticket::with('facility','invoice')->where('status',1)->whereDate('show_date',$ticket_date)->get();
        ////////////////////////////////////////////////

        /////financial report.////////////////////////
        $financial_ticket_array=[];
        $financial_ticket_query =[];
        $spl_ticket_query = [];
        $spl_ticket_array = [];
        $spl_ticket_date_arr =[];
        $fin_ticket_date_arr = [];
        $flg =[];
        $splflg = [];
        $facilities = Facility::where('active_flag',1)->get();
        foreach($facilities as $facility)
        {
            $facility_id = $facility->id;
            $fin_ticket_date_arr[$facility_id][] = $ticket_date;
            $spl_ticket_date_arr[$facility_id][] = $ticket_date;
            $financial_ticket_query[$facility_id][$ticket_date] = Ticket::where('facility_id',$facility_id)->where('status',1)->whereDate('show_date',$ticket_date)->with('facility','showtime')->whereHas('showtime',function($showt) { $showt->where('show_flag',0); })->get();
            $n =0;
            $from_time = "";
            $to_time = "";
            $adult_count = "";
            $child_count = "";
            $totalamount = "";
            $show_date = "";
            foreach($financial_ticket_query[$facility_id][$ticket_date] as $tickets)
            {
                $flg[$facility_id] = 1;
                $n++;
                $show_date = $tickets->show_date;
                //echo "show_date=$show_date...facility_id=$facility_id....ticket_date=$ticket_date....<br>";
                $from_time = $tickets->showtime->from_time;
                $to_time = $tickets->showtime->to_time;
                $adult_count = $tickets->noof_adult;
                $child_count = $tickets->noof_child;
                $totalamount = $tickets->amount;
                $financial_ticket_array[$facility_id][$ticket_date][$n]['date'] = $ticket_date;
                $financial_ticket_array[$facility_id][$ticket_date][$n]['showtime'] = $from_time." to ".$to_time;
                $financial_ticket_array[$facility_id][$ticket_date][$n]['noofadults'] = $adult_count;
                $financial_ticket_array[$facility_id][$ticket_date][$n]['noofchildren'] = $child_count;
                $financial_ticket_array[$facility_id][$ticket_date][$n]['amount'] = $totalamount;
            }

            ////special shows
            $spl_ticket_query[$facility_id][$ticket_date] = Ticket::where('facility_id',$facility_id)->where('status',1)->whereDate('show_date',$ticket_date)->with('facility','showtime')->whereHas('showtime',function($showt) { $showt->where('show_flag',1); })->get();
            $n =0;
            $from_time = "";
            $to_time = "";
            $adult_count = "";
            $child_count = "";
            $totalamount = "";
            $show_date = "";
            foreach($spl_ticket_query[$facility_id][$ticket_date] as $spl_tickets)
            {
                $splflg[$facility_id] = 1;
                $n++;
                $show_date = $spl_tickets->show_date;
                //echo "show_date=$show_date...facility_id=$facility_id....ticket_date=$ticket_date....<br>";
                $from_time = $spl_tickets->showtime->from_time;
                $to_time = $spl_tickets->showtime->to_time;
                $adult_count = $spl_tickets->noof_adult;
                $child_count = $spl_tickets->noof_child;
                $totalamount = $spl_tickets->amount;
                $spl_ticket_array[$facility_id][$ticket_date][$n]['date'] = $ticket_date;
                $spl_ticket_array[$facility_id][$ticket_date][$n]['showtime'] = $from_time." to ".$to_time;
                $spl_ticket_array[$facility_id][$ticket_date][$n]['noofadults'] = $adult_count;
                $spl_ticket_array[$facility_id][$ticket_date][$n]['noofchildren'] = $child_count;
                $spl_ticket_array[$facility_id][$ticket_date][$n]['amount'] = $totalamount;
            }

        }
        ///////////////////////////////////////////////
        $faciltiy_pdf = PDF::loadView('Reports.download_facility_report_pdf', compact('financial_ticket_array','detailed_report_arr','ticket_date','ticket_array','facilities','spl_ticket_array','flg','splflg'));
        $detailed_pdf = PDF::loadView('Reports.download_detailed_report_pdf', compact('financial_ticket_array','detailed_report_arr','ticket_date','ticket_array','facilities','spl_ticket_array','flg','splflg'));
        $financial_pdf = PDF::loadView('Reports.download_financial_report_pdf', compact('financial_ticket_array','detailed_report_arr','ticket_date','ticket_array','facilities','spl_ticket_array','flg','splflg'));
        /////////////////////////////////////////////////

        //$financial_pdf->download('financialpdfreport.pdf');
        //$detailed_pdf->download('detailedpdfreport.pdf');
        //$faciltiy_pdf->download('facilitypdfreport.pdf');

        $today_timestamp = date("Y-m-d_h-i-s");
        $facility_insert_id = ReportData::create([
                    'report_name_timestamp' => 'facilitypdfreport_'.$today_timestamp.'.pdf',
                    'status' => 0,
                ]);
        $detailed_insert_id = ReportData::create([
                    'report_name_timestamp' => 'detailedpdfreport_'.$today_timestamp.'.pdf',
                    'status' => 0,
                ]);
        $financial_insert_id = ReportData::create([
                    'report_name_timestamp' => 'financialpdfreport_'.$today_timestamp.'.pdf',
                    'status' => 0,
                ]);

        $facility_output = $faciltiy_pdf->output();
        \Storage::put('uploads/reports/facilitypdfreport_'.$today_timestamp.'.pdf', $facility_output);
        //file_put_contents('uploads/reports/facilitypdfreport_'.$today_timestamp.'.pdf', $facility_output);

        $detailed_output = $detailed_pdf->output();
        \Storage::put('uploads/reports/detailedpdfreport_'.$today_timestamp.'.pdf', $detailed_output);
        //file_put_contents('uploads/reports/detailedpdfreport_'.$today_timestamp.'.pdf', $detailed_output);

        $financial_output = $financial_pdf->output();
        \Storage::put('uploads/reports/financialpdfreport_'.$today_timestamp.'.pdf', $financial_output);
        //file_put_contents('uploads/reports/financialpdfreport_'.$today_timestamp.'.pdf', $financial_output);
    }

    /*public function facility_mailsend_report()
    {
        $ticket_date = date("Y-m-d");
        $config_settings = Configuration::first();
        if(isset($config_settings))
        {
            $reports_mailto = $config_settings->reports_mailto;
            $reports_mailto_arr = explode(',', $reports_mailto);
        }   
        $report_name_data= "";
        $reportdatas = ReportData::where('status',0)->get();
        foreach($reportdatas as $reportdata)
        {
            $report_data_id = $reportdata->id;
            $report_name_data = $reportdata->report_name_timestamp;
            foreach($reports_mailto_arr as $reports_mailto)
            {
                $attached_data = "'uplods/reports/".$report_name_data;
                $path = public_path()."/uploads/reports/".$report_name_data;
                $total_path[] = $path; 
                //////////////////////////////////////////////////////
            }
        }
        //dd($total_path);
        $data= ['message' => 'Welcome to KSSTM Ticketing Application!', 'mailto'=>$reports_mailto, 'report_name_data'=>'Reports', 'attached_data'=>$total_path ];
        //mailing to the registered email
        Mail::to($reports_mailto)->send(new ReportMail($data));
        $reportdatas = ReportData::where('status',0)->get();
        foreach($reportdatas as $reportdata)
        {
            $report_data_id = $reportdata->id;
            $report_name_data = $reportdata->report_name_timestamp;
            //////update the status
            $data_update = ReportData::where('id',$report_data_id)->first();
            $data_update->status=1;
            $data_update->save();
            //////delete the report from folder//////////////////////////////
            $path_unlink = trim(public_path()."/uploads/reports/".$report_name_data);
            unlink($path_unlink);
        }
    }*/

    public function facility_mailsend_report()
    {
        $reports_mailto = "";
        $config_settings = Configuration::first();
        if(isset($config_settings))
        {
            $reports_mail_to = $config_settings->reports_mailto;
            $reports_mailto_arr = explode(',', $reports_mail_to);
        }   
        $report_name_data= "";
        $reportdatas = ReportData::where('status',0)->get();
        foreach($reportdatas as $reportdata)
        {
            $report_data_id = $reportdata->id;
            $report_name_data = $reportdata->report_name_timestamp;
            $attached_data = "'uplods/reports/".$report_name_data;
            $path = public_path()."/uploads/reports/".$report_name_data;
            $total_path[] = $path;             
        }
        //dd($total_path);
        if($reports_mail_to)
        {
            foreach($reports_mailto_arr as $reports_mailto)
            {
                if($reports_mailto)
                {
                    $data= ['message' => 'Welcome to KSSTM Ticketing Application!', 'mailto'=>$reports_mailto, 'report_name_data'=>'Reports', 'attached_data'=>$total_path ];
                    //mailing to the registered email
                    Mail::to($reports_mailto)->send(new ReportMail($data));
                }
            }
            $reportdatas = ReportData::where('status',0)->get();
            foreach($reportdatas as $reportdata)
            {
                $report_data_id = $reportdata->id;
                $report_name_data = $reportdata->report_name_timestamp;
                //////update the status
                $data_update = ReportData::where('id',$report_data_id)->first();
                $data_update->status=1;
                $data_update->save();
                //////delete the report from folder//////////////////////////////
                $path_unlink = trim(public_path()."/uploads/reports/".$report_name_data);
                unlink($path_unlink);
            }
        }
    }
}
?>