<?php

namespace App\Http\Controllers\serverExport;


use Illuminate\Http\Request;

use Validator;
use Carbon\Carbon;

use Illuminate\Support\Facades\Crypt;
use Maatwebsite\Excel\Facades\Excel;
use PhpOffice\PhpSpreadsheet\Shared\Date;
use App\Exports\Export_age;
use App\Exports\MME_Export\CervicalCancer\CervicalServerExport;
use App\Exports\RiskbackExcel\RefillRisk;
use App\Helper\ExportHelper;
use App\Http\Controllers\Controller;
//use App\Exports\RefillRisk;
use DateTime;


class CervicalCancerController extends Controller
{

    protected $DB;

    public function __construct()
    {
        $this->DB = (new ExportHelper())->DB;
    }
    protected $table_code = "General";
    protected $final_risklog = [];
    protected    $final_log = [];

    public function cervicalExport(Request $request)
    {
        $users = collect([]);
        $encrypted_columns = [
            "Main Risk",
            "Sub Risk",
            "Gender",
        ];
        $date_type = ["Visit_date", "ucg_test_date","thermal_abl_need_date","thermal_perform_date","postpone_date","followup_date"];
        $modelClassName = "App\\Models\Cervicalcancer1"; // extend model
        $model = app()->make($modelClassName); // resolves the model from the service container.
        foreach ($request["clinics"] as $clinic) {
            $model->setConnection($this->DB[$clinic]);
            $cervical_data = $model
                ->whereBetween("cervicalcancer1s.Visit_date", [$request["From_date"], $request["To_date"]])
                ->leftJoin("patients", "patients.Pid", "=", "cervicalcancer1s.General ID")
                ->select("cervicalcancer1s.*", "Date of Birth", "patients.Agey", "patients.Agem", "patients.Gender", "patients.FuchiaID", "patients.Pid", "patients.Main Risk", "patients.Sub Risk", "cervicalcancer1s.created_at", "cervicalcancer1s.updated_at", 'Risk log', 'Former Risk', 'Risk Change_Date','Pid')
                ->get();
            $users = $users->merge($cervical_data);
        }
        foreach ($users as $key => $user) {
            if ($user["Date of Birth"] == null || $user["Pid"] == null) {
                $user = ExportHelper::NoCofidential($user, $user['Visit_date']);
            } else {
                $user = Export_age::Export_general($user, $user['Visit_date'], $user["Date of Birth"], $user);
            }
            $carbonDate = Carbon::createFromFormat('Y-m-d', $user['Visit_date']);
            $carbonDate = Carbon::createFromFormat('d-m-Y', $carbonDate->format('d-m-Y'));
            $vdate = new DateTime($carbonDate);
            if ($user["Risk Log"] != null) {
                $forRiskCheck[1]['Pid'] = $user['Pid'];
                $forRiskCheck[1]['Risk Log'] = $user['Risk Log'];
                if (!array_key_exists($user['Pid'], $this->final_log)) {
                    $this->final_risklog = RefillRisk::FillRisk($forRiskCheck);
                    $this->final_log[$user['Pid']] = $this->final_risklog;
                }
                if (array_key_exists($user['Pid'], $this->final_log)) {
                    foreach (array_reverse($this->final_log[$user['Pid']][$user['Pid']]) as $date => $data) {

                        if (strlen($date) == 10) {
                            $riskChangeDate = new DateTime($date);
                            if ($vdate < $riskChangeDate) {
                                $user['Main Risk'] = Crypt::encrypt_light($data['Old Risk'], 'General');
                                $user['Sub Risk'] = Crypt::encrypt_light($data['Old Sub Risk'], 'General');
                            }
                        }
                    }
                }
            } elseif ($user['Risk Change_Date'] != null && $user['Former Risk'] != null && $user['Former Risk'] != "731") {
                $riskChangeDate = Carbon::createFromFormat('Y-m-d', $user['Risk Change_Date']);
                $riskChangeDate = new DateTime(Carbon::createFromFormat('d-m-Y', $riskChangeDate->format('d-m-Y')));
                if ($vdate < $riskChangeDate) {
                    $user['Main Risk'] = $user['Former Risk'];
                    $user['Sub Risk'] = '';
                }
            }
            foreach ($date_type as $column) {
                $dateString = $user[$column];
                if (!empty($dateString)) {
                    $carbonDate = Carbon::createFromFormat("Y-m-d", $dateString);
                    $ddString = $carbonDate->format("d-m-Y");

                    $carbonDate = Carbon::createFromFormat("d-m-Y", $ddString); // Assuming you have a Carbon instance
                    $user[$column] = Date::dateTimeToExcel($carbonDate->startOfDay()); // Convert to Excel-compatible date
                }
            }
            foreach ($encrypted_columns as $column) {
                $user[$column] = Crypt::decrypt_light($user[$column], "General");
                if (($column == "Main Risk" || $column == "Sub Risk") && $user[$column] == "-") {
                    $user[$column] = null;
                }

                $user[$column] = Crypt::codeBook($user[$column], "encode");
            }
            
        }
        // return $cercival_export;
       return Excel::download(new CervicalServerExport($users),"Cervical_Cancer_New-" . date("d-m-Y") . ".xlsx" );
    }
}
