<?php

namespace App\Http\Controllers;

use Illuminate\Filesystem\Filesystem;
use Illuminate\Http\Request;
use App\DataTables\DivisionReportDatatables;
use App\DataTables\LevelReportDatatables;
use App\Jobs\GenerateBatchCodes;
use App\DataTables\DepartmentReportDatatables;
use App\DataTables\DivisionReportView;
use App\DataTables\DepartmentReportView;
use App\DataTables\LevelReportView;
use App\DataTables\AppPersonnelReportView;
use App\DataTables\DepartmentDatatables;
use App\Department;
use App\Division;
use App\UsersDb;
use App\ConflictOfInterest;
use App\Annexure_One;
use App\Annexure_Two;
use Illuminate\Support\Facades\Storage;
use App\Annexure_Three;
use App\Annexure_Four;
use App\Annexure_Five;
use App\Annexure_Six;
use App\Annexure_Seven;
use App\Annexure_Eight;
use App\AuditTrail;
use App\Annexure_Nine;
use App\Annexure_Ten;
use App\Annexure_Eleven;
use App\Annexure_Twelve;
use App\Annexure_Thirteen;
use App\Annexure_Fourteen;
use App\Annexure_Status;
use App\AdminModel;
use App\Annexure_Fifteen;
use Illuminate\Support\Facades\Session;
use PDF;
use ZipArchive;
use Illuminate\Support\Facades\File;

class ReportController extends Controller
{
    public function index(DivisionReportDatatables $datatable)
    {
        AuditTrail::create([
            'userid' => auth()->guard('adminguard')->user()->id,
            'name' => auth()->guard('adminguard')->user()->name,
            'activity' => 'View: Is viewing Division Report Page',
            // 'message',
        ]);
        return $datatable->render('admin.report.division');
    }

    public function levelreport(LevelReportDatatables $datatable)
    {
        AuditTrail::create([
            'userid' => auth()->guard('adminguard')->user()->id,
            'name' => auth()->guard('adminguard')->user()->name,
            'activity' => 'View: Is viewing Level Report Page',
            // 'message',
        ]);
        return $datatable->render('admin.report.level');
    }

    // public function divisionreport(Division $div)
    // {
    //     $dept = UsersDb::query()->where('div_id', $div->name)->get();
    //     if ($dept->isEmpty()) {

    //         return redirect(route('report.groupmanager.index'))->with('error', 'No persons has been assigned to ' . $div->name . ' division');
    //     } else {
    //         $abs_path = storage_path("tmp/");
    //         if (file_exists($abs_path)) {
    //             $file = new Filesystem;
    //             $file->cleanDirectory($abs_path);
    //         }


    //         foreach ($dept as $key) {

    //             $a1 = Annexure_One::query()->where('userid', $key->id)->first();

    //             $a2 = Annexure_Two::query()->where('userid', $key->id)->first();

    //             $a3 = Annexure_Three::query()->where('userid', $key->id)->first();

    //             $a4 = Annexure_Four::query()->where('userid', $key->id)->first();

    //             $a5 = Annexure_Five::query()->where('userid', $key->id)->first();

    //             $a6 = Annexure_Six::query()->where('userid', $key->id)->first();

    //             $a7 = Annexure_Seven::query()->where('userid', $key->id)->first();

    //             $a8 = Annexure_Eight::query()->where('userid', $key->id)->first();

    //             $a9 = Annexure_Nine::query()->where('userid', $key->id)->first();

    //             $a10 = Annexure_Ten::query()->where('userid', $key->id)->first();

    //             $a11 = Annexure_Eleven::query()->where('userid', $key->id)->first();


    //             $a12 = Annexure_Twelve::query()->where('userid', $key->id)->first();


    //             $a13 = Annexure_Thirteen::query()->where('userid', $key->id)->first();


    //             $a14 = Annexure_Fourteen::query()->where('userid', $key->id)->first();


    //             $a15 = Annexure_Fifteen::query()->where('userid', $key->id)->first();

    //             $a16 = Annexure_Fifteen::query()->where('userid', $key->id)->first();
    //             $coi = ConflictOfInterest::query()->where('userid', $key->id)->first();
    //             $dfname = 'MMTN_COI_' . $key->name . '_' . date('m-Y');
    //             $data = [
    //                 'a1' => $a1,
    //                 'a2' => $a2,
    //                 'a3' => $a3,
    //                 'a4' => $a4,
    //                 'a5' => $a5,
    //                 'a6' => $a6,
    //                 'a7' => $a7,
    //                 'a8' => $a8,
    //                 'a9' => $a9,
    //                 'a10' => $a10,
    //                 'a11' => $a11,
    //                 'a12' => $a12,
    //                 'a13' => $a13,
    //                 'a14' => $a14,
    //                 'a15' => $a15,
    //                 'a16' => $a16,
    //                 'coi' => $key,

    //             ];


    //             $adminidd = Session::get('adminid');
    //             $admin = AdminModel::where('id', $adminidd)->first();
    //             $admin->log('(Admin):Download coi of division ' . $div->name);
    //             $pdf = PDF::loadView('admin.annexures.download', $data)->save($abs_path . $dfname . '.pdf');
    //         }
    //         // return $abs_path;
    //         $zipper = new \Chumper\Zipper\Zipper;
    //         $files = $abs_path;

    //         $zipper->make($abs_path . "Division_Report.zip")->add($files)->close();
    //         return response()->download($abs_path . "Division_Report.zip");

    //     }
    // }


    public function divisionreport(Division $div)
    {
        $dept = UsersDb::query()->where('div_id', $div->name)->get();
        if ($dept->isEmpty()) {
            return redirect(route('report.groupmanager.index'))->with('error', 'No persons has been assigned to ' . $div->name . ' division');
        } else {
            $abs_path = storage_path("tmp/");
            if (file_exists($abs_path)) {
                $file = new Filesystem;
                $file->cleanDirectory($abs_path);
            }

            $zip = new ZipArchive();
            $archivePath = $abs_path . "Division_Report.zip";

            if ($zip->open($archivePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
                foreach ($dept as $key) {

                $a1 = Annexure_One::query()->where('userid', $key->id)->first();

                $a2 = Annexure_Two::query()->where('userid', $key->id)->first();

                $a3 = Annexure_Three::query()->where('userid', $key->id)->first();

                $a4 = Annexure_Four::query()->where('userid', $key->id)->first();

                $a5 = Annexure_Five::query()->where('userid', $key->id)->first();

                $a6 = Annexure_Six::query()->where('userid', $key->id)->first();

                $a7 = Annexure_Seven::query()->where('userid', $key->id)->first();

                $a8 = Annexure_Eight::query()->where('userid', $key->id)->first();

                $a9 = Annexure_Nine::query()->where('userid', $key->id)->first();

                $a10 = Annexure_Ten::query()->where('userid', $key->id)->first();

                $a11 = Annexure_Eleven::query()->where('userid', $key->id)->first();


                $a12 = Annexure_Twelve::query()->where('userid', $key->id)->first();


                $a13 = Annexure_Thirteen::query()->where('userid', $key->id)->first();


                $a14 = Annexure_Fourteen::query()->where('userid', $key->id)->first();


                $a15 = Annexure_Fifteen::query()->where('userid', $key->id)->first();

                $a16 = Annexure_Fifteen::query()->where('userid', $key->id)->first();
                $coi = ConflictOfInterest::query()->where('userid', $key->id)->first();

                    $dfname = 'MMTN_COI_' . $key->name . '_' . date('m-Y');
                    $data = [
                        'a1' => $a1,
                        'a2' => $a2,
                        'a3' => $a3,
                        'a4' => $a4,
                        'a5' => $a5,
                        'a6' => $a6,
                        'a7' => $a7,
                        'a8' => $a8,
                        'a9' => $a9,
                        'a10' => $a10,
                        'a11' => $a11,
                        'a12' => $a12,
                        'a13' => $a13,
                        'a14' => $a14,
                        'a15' => $a15,
                        'a16' => $a16,
                        'coi' => $key,
                    ];

                    $adminidd = Session::get('adminid');
                    $admin = AdminModel::where('id', $adminidd)->first();
                    $admin->log('(Admin):Download coi of division ' . $div->name);
                    $pdf = PDF::loadView('admin.annexures.download', $data)->save($abs_path . $dfname . '.pdf');

                    $pdfPath = $abs_path . $dfname . '.pdf';
                    $zip->addFile($pdfPath, $dfname . '.pdf');
                }

                $zip->close();

                return response()->download($archivePath);
            }

            return 'Failed to create the ZIP archive.';
        }
    }


    public function deptindex(DepartmentReportDatatables $datatable)
    {
        AuditTrail::create([
            'userid' => auth()->guard('adminguard')->user()->id,
            'name' => auth()->guard('adminguard')->user()->name,
            'activity' => 'View: Is viewing Division Report Page',
            // 'message',
        ]);
        return $datatable->render('admin.report.department');
    }

    // public function departmentreport($dept)
    // {
    //     $deptt = UsersDb::query()->where('dept', $dept)->get();
    //     if ($deptt->isEmpty()) {

    //         return redirect(route('report.groupmanager.dept.index'))->with('error', 'No persons has been assigned to ' . $dept . ' department');
    //     } else {
    //         $abs_path = storage_path("/tmp/");
    //         if (file_exists($abs_path)) {
    //             $file = new Filesystem;
    //             $file->cleanDirectory($abs_path);
    //         }

    //         $generated_batch_codes = UsersDb::query()->where('dept', $dept)->chunkById(50, function ($keys) use ($dept, $abs_path) {
    //             foreach ($keys as $key) {

    //                 $a1 = Annexure_One::query()->where('userid', $key->id)->first();

    //                 $a2 = Annexure_Two::query()->where('userid', $key->id)->first();

    //                 $a3 = Annexure_Three::query()->where('userid', $key->id)->first();

    //                 $a4 = Annexure_Four::query()->where('userid', $key->id)->first();

    //                 $a5 = Annexure_Five::query()->where('userid', $key->id)->first();

    //                 $a6 = Annexure_Six::query()->where('userid', $key->id)->first();

    //                 $a7 = Annexure_Seven::query()->where('userid', $key->id)->first();

    //                 $a8 = Annexure_Eight::query()->where('userid', $key->id)->first();

    //                 $a9 = Annexure_Nine::query()->where('userid', $key->id)->first();

    //                 $a10 = Annexure_Ten::query()->where('userid', $key->id)->first();

    //                 $a11 = Annexure_Eleven::query()->where('userid', $key->id)->first();


    //                 $a12 = Annexure_Twelve::query()->where('userid', $key->id)->first();


    //                 $a13 = Annexure_Thirteen::query()->where('userid', $key->id)->first();


    //                 $a14 = Annexure_Fourteen::query()->where('userid', $key->id)->first();


    //                 $a15 = Annexure_Fifteen::query()->where('userid', $key->id)->first();

    //                 $a16 = Annexure_Fifteen::query()->where('userid', $key->id)->first();
    //                 $coi = ConflictOfInterest::query()->where('userid', $key->id)->first();
    //                 $dfname = 'MMTN_COI_' . $key->name . '_' . date('m-Y');
    //                 $data = [
    //                     'a1' => $a1,
    //                     'a2' => $a2,
    //                     'a3' => $a3,
    //                     'a4' => $a4,
    //                     'a5' => $a5,
    //                     'a6' => $a6,
    //                     'a7' => $a7,
    //                     'a8' => $a8,
    //                     'a9' => $a9,
    //                     'a10' => $a10,
    //                     'a11' => $a11,
    //                     'a12' => $a12,
    //                     'a13' => $a13,
    //                     'a14' => $a14,
    //                     'a15' => $a15,
    //                     'a16' => $a16,
    //                     'coi' => $key,
    //                 ];

    //                 $adminidd = Session::get('adminid');
    //                 $admin = AdminModel::where('id', $adminidd)->first();
    //                 $admin->log('(Admin):Download coi of department ' . $dept);

    //                 $pdf = PDF::loadView('admin.annexures.download', $data)->save($abs_path . $dfname . '.pdf');
    //             }
    //         });
    //         $zipper = new \Chumper\Zipper\Zipper;
    //         $files = $abs_path;

    //         $zipper->make($abs_path . "Department_Report.zip")->add($files)->close();
    //         return response()->download($abs_path . "Department_Report.zip");

    //     }
    // }

public function departmentreport($dept)
{
    $deptt = UsersDb::query()->where('dept', $dept)->get();
    if ($deptt->isEmpty()) {
        return redirect(route('report.groupmanager.dept.index'))->with('error', 'No persons has been assigned to ' . $dept . ' department');
    } else {
        $abs_path = storage_path("tmp/");
        if (file_exists($abs_path)) {
            $file = new Filesystem;
            $file->cleanDirectory($abs_path);
        }

        $zip = new ZipArchive();
        $archivePath = $abs_path . "Department_Report.zip";

        if ($zip->open($archivePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
            $generated_batch_codes = UsersDb::query()->where('dept', $dept)->chunkById(50, function ($keys) use ($dept, $abs_path, $zip) {
                foreach ($keys as $key) {

                    $a1 = Annexure_One::query()->where('userid', $key->id)->first();

                    $a2 = Annexure_Two::query()->where('userid', $key->id)->first();

                    $a3 = Annexure_Three::query()->where('userid', $key->id)->first();

                    $a4 = Annexure_Four::query()->where('userid', $key->id)->first();

                    $a5 = Annexure_Five::query()->where('userid', $key->id)->first();

                    $a6 = Annexure_Six::query()->where('userid', $key->id)->first();

                    $a7 = Annexure_Seven::query()->where('userid', $key->id)->first();

                    $a8 = Annexure_Eight::query()->where('userid', $key->id)->first();

                    $a9 = Annexure_Nine::query()->where('userid', $key->id)->first();

                    $a10 = Annexure_Ten::query()->where('userid', $key->id)->first();

                    $a11 = Annexure_Eleven::query()->where('userid', $key->id)->first();


                    $a12 = Annexure_Twelve::query()->where('userid', $key->id)->first();


                    $a13 = Annexure_Thirteen::query()->where('userid', $key->id)->first();


                    $a14 = Annexure_Fourteen::query()->where('userid', $key->id)->first();


                    $a15 = Annexure_Fifteen::query()->where('userid', $key->id)->first();

                    $a16 = Annexure_Fifteen::query()->where('userid', $key->id)->first();
                    $coi = ConflictOfInterest::query()->where('userid', $key->id)->first();

                    $dfname = 'MMTN_COI_' . $key->name . '_' . date('m-Y');
                    $data = [
                        'a1' => $a1,
                        'a2' => $a2,
                        'a3' => $a3,
                        'a4' => $a4,
                        'a5' => $a5,
                        'a6' => $a6,
                        'a7' => $a7,
                        'a8' => $a8,
                        'a9' => $a9,
                        'a10' => $a10,
                        'a11' => $a11,
                        'a12' => $a12,
                        'a13' => $a13,
                        'a14' => $a14,
                        'a15' => $a15,
                        'a16' => $a16,
                        'coi' => $key,
                    ];

                    $adminidd = Session::get('adminid');
                    $admin = AdminModel::where('id', $adminidd)->first();
                    $admin->log('(Admin):Download coi of department ' . $dept);

                    $pdf = PDF::loadView('admin.annexures.download', $data)->save($abs_path . $dfname . '.pdf');

                    $pdfPath = $abs_path . $dfname . '.pdf';
                    $zip->addFile($pdfPath, $dfname . '.pdf');
                }
            });

            $zip->close();

            return response()->download($archivePath);
        }

        return 'Failed to create the ZIP archive.';
    }
}



    // public function levelreportdwn($level)
    // {
    //     $lvl = UsersDb::query()->where('level', $level)->get();

    //     if ($lvl->isEmpty()) {

    //         return redirect(route('report.groupmanager.index'))->with('error', 'No persons has been assigned to ' . $level->level . ' level');
    //     } else {
    //         $abs_path = storage_path("tmp/");
    //         if (file_exists($abs_path)) {
    //             $file = new Filesystem;
    //             $file->cleanDirectory($abs_path);
    //         }
    //         foreach ($lvl as $key) {

    //             $a1 = Annexure_One::query()->where('userid', $key->id)->first();

    //             $a2 = Annexure_Two::query()->where('userid', $key->id)->first();

    //             $a3 = Annexure_Three::query()->where('userid', $key->id)->first();

    //             $a4 = Annexure_Four::query()->where('userid', $key->id)->first();

    //             $a5 = Annexure_Five::query()->where('userid', $key->id)->first();

    //             $a6 = Annexure_Six::query()->where('userid', $key->id)->first();

    //             $a7 = Annexure_Seven::query()->where('userid', $key->id)->first();

    //             $a8 = Annexure_Eight::query()->where('userid', $key->id)->first();

    //             $a9 = Annexure_Nine::query()->where('userid', $key->id)->first();

    //             $a10 = Annexure_Ten::query()->where('userid', $key->id)->first();

    //             $a11 = Annexure_Eleven::query()->where('userid', $key->id)->first();


    //             $a12 = Annexure_Twelve::query()->where('userid', $key->id)->first();


    //             $a13 = Annexure_Thirteen::query()->where('userid', $key->id)->first();


    //             $a14 = Annexure_Fourteen::query()->where('userid', $key->id)->first();


    //             $a15 = Annexure_Fifteen::query()->where('userid', $key->id)->first();

    //             $a16 = Annexure_Fifteen::query()->where('userid', $key->id)->first();
    //             $coi = ConflictOfInterest::query()->where('userid', $key->id)->first();
    //             $dfname = 'MMTN_COI_' . $key->name . '_' . date('m-Y');
    //             $data = [
    //                 'a1' => $a1,
    //                 'a2' => $a2,
    //                 'a3' => $a3,
    //                 'a4' => $a4,
    //                 'a5' => $a5,
    //                 'a6' => $a6,
    //                 'a7' => $a7,
    //                 'a8' => $a8,
    //                 'a9' => $a9,
    //                 'a10' => $a10,
    //                 'a11' => $a11,
    //                 'a12' => $a12,
    //                 'a13' => $a13,
    //                 'a14' => $a14,
    //                 'a15' => $a15,
    //                 'a16' => $a16,
    //                 'coi' => $key,

    //             ];


    //             $adminidd = Session::get('adminid');
    //             $admin = AdminModel::where('id', $adminidd)->first();
    //             $admin->log('(Admin):Download coi of Level ' . $level);
    //             $pdf = PDF::loadView('admin.annexures.download', $data)->save($abs_path . $dfname . '.pdf');
    //         }
    //         // return $abs_path;
    //         $zipper = new \Chumper\Zipper\Zipper;
    //         $files = $abs_path;

    //         $zipper->make($abs_path . "Level_Report.zip")->add($files)->close();
    //         return response()->download($abs_path . "Level_Report.zip");


    //     }
    // }


public function levelreportdwn($level)
{
    $lvl = UsersDb::query()->where('level', $level)->get();

    if ($lvl->isEmpty()) {
        return redirect(route('report.groupmanager.index'))->with('error', 'No persons has been assigned to ' . $level->level . ' level');
    } else {
        $abs_path = storage_path("tmp/");
        if (file_exists($abs_path)) {
            $file = new Filesystem;
            $file->cleanDirectory($abs_path);
        }

        $zip = new ZipArchive();
        $archivePath = $abs_path . "Level_Report.zip";

        if ($zip->open($archivePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
            foreach ($lvl as $key) {
                $a1 = Annexure_One::query()->where('userid', $key->id)->first();

                $a2 = Annexure_Two::query()->where('userid', $key->id)->first();

                $a3 = Annexure_Three::query()->where('userid', $key->id)->first();

                $a4 = Annexure_Four::query()->where('userid', $key->id)->first();

                $a5 = Annexure_Five::query()->where('userid', $key->id)->first();

                $a6 = Annexure_Six::query()->where('userid', $key->id)->first();

                $a7 = Annexure_Seven::query()->where('userid', $key->id)->first();

                $a8 = Annexure_Eight::query()->where('userid', $key->id)->first();

                $a9 = Annexure_Nine::query()->where('userid', $key->id)->first();

                $a10 = Annexure_Ten::query()->where('userid', $key->id)->first();

                $a11 = Annexure_Eleven::query()->where('userid', $key->id)->first();


                $a12 = Annexure_Twelve::query()->where('userid', $key->id)->first();


                $a13 = Annexure_Thirteen::query()->where('userid', $key->id)->first();


                $a14 = Annexure_Fourteen::query()->where('userid', $key->id)->first();


                $a15 = Annexure_Fifteen::query()->where('userid', $key->id)->first();

                $a16 = Annexure_Fifteen::query()->where('userid', $key->id)->first();
                $coi = ConflictOfInterest::query()->where('userid', $key->id)->first();

                $dfname = 'MMTN_COI_' . $key->name . '_' . date('m-Y');
                $data = [
                    'a1' => $a1,
                    'a2' => $a2,
                    'a3' => $a3,
                    'a4' => $a4,
                    'a5' => $a5,
                    'a6' => $a6,
                    'a7' => $a7,
                    'a8' => $a8,
                    'a9' => $a9,
                    'a10' => $a10,
                    'a11' => $a11,
                    'a12' => $a12,
                    'a13' => $a13,
                    'a14' => $a14,
                    'a15' => $a15,
                    'a16' => $a16,
                    'coi' => $key,
                ];

                $adminidd = Session::get('adminid');
                $admin = AdminModel::where('id', $adminidd)->first();
                $admin->log('(Admin):Download coi of Level ' . $level);

                $pdf = PDF::loadView('admin.annexures.download', $data)->save($abs_path . $dfname . '.pdf');

                $pdfPath = $abs_path . $dfname . '.pdf';
                $zip->addFile($pdfPath, $dfname . '.pdf');
            }

            $zip->close();

            return response()->download($archivePath);
        }

        return 'Failed to create the ZIP archive.';
    }
}


    public function viewdivisionreport(DivisionReportView $dt, $id)
    {
        AuditTrail::create([
            'userid' => auth()->guard('adminguard')->user()->id,
            'name' => auth()->guard('adminguard')->user()->name,
            'activity' => 'View: Is viewing ' . $id . ' report page',
            // 'message',
        ]);
        return $dt->with('id', $id)->render('admin.report.viewdivisionreport');
    }

    public function viewdepartreport(DepartmentReportView $dt, $id)
    {
        AuditTrail::create([
            'userid' => auth()->guard('adminguard')->user()->id,
            'name' => auth()->guard('adminguard')->user()->name,
            'activity' => 'View: Is viewing ' . $id . ' report page',
            // 'message',
        ]);
        return $dt->with('id', $id)->render('admin.report.viewdeptreport');
    }

    public function viewlevelreport(LevelReportView $dt, $id)
    {
        AuditTrail::create([
            'userid' => auth()->guard('adminguard')->user()->id,
            'name' => auth()->guard('adminguard')->user()->name,
            'activity' => 'View: Is viewing ' . $id . ' report page',
            // 'message',
        ]);
        return $dt->with('id', $id)->render('admin.report.viewlevelreport');
    }

    public function allreport(AppPersonnelReportView $dt)
    {
        AuditTrail::create([
            'userid' => auth()->guard('adminguard')->user()->id,
            'name' => auth()->guard('adminguard')->user()->name,
            'activity' => 'View: Is viewing all personnel report page',
            // 'message',
        ]);
        return $dt->render('admin.report.allpersonnel');
    }
}
