<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ReceptionController;
use App\Http\Controllers\ncdRegisterPtController;

use App\Http\Controllers\CervicalcancerscrenningController;
use App\Http\Controllers\Cervicalcancerscrenning1Controller;
use App\Http\Controllers\CmvController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\NcdAnalysisController;
use App\Http\Controllers\PreGeneratedExportController;
use App\Http\Controllers\PreTbRecordController;
use App\Http\Controllers\PreventionGpsMapController;
use App\Http\Controllers\STI\StiReportController;


use App\Http\Controllers\LabsController;
use App\Http\Controllers\StiController;
use App\Http\Controllers\Consultation0Controller;
use App\Http\Controllers\Consultation1Controller;
use App\Http\Controllers\LabimportController;

use App\Http\Controllers\DispensingController;
use App\Http\Controllers\ManageController;
use App\Http\Controllers\AnnounceController;
use App\Http\Controllers\CounsellingController;
use App\Http\Controllers\Logsheet_cbsController;

use App\Http\Controllers\FinderController;
use App\Http\Controllers\MentalController;
use App\Http\Controllers\PrepFacilityController;
use App\Http\Controllers\PrepScreeningController;

use App\Http\Controllers\OfficeLab\LabOfficeController;
use App\Http\Controllers\OfficeLab\LabreportController;
use App\Http\Controllers\OfficeLab\CliniclabController;

use App\Http\Controllers\FeedingCenter\FeedingcenterController;
use App\Http\Controllers\ANC\AncController;
use App\Http\Controllers\HBV\HbvRegisterController;
use App\Http\Controllers\Art\ServicesController;

use App\Http\Controllers\PWA\PwaguideController;
use App\Http\Controllers\PWA\GuidelineController;

use App\Http\Controllers\Tb03Controller;
use App\Http\Controllers\PreTBController;
use App\Http\Controllers\TBIPTController;
use App\Http\Controllers\RiskLogController;
use App\Http\Controllers\MME_ExportController;
use App\Http\Controllers\MME_DashboardController;
use App\Http\Controllers\ServerRiskLogController;

use App\Http\Controllers\EntrycountController;
use App\Http\Controllers\ServerComsumptionReportController;

use App\Http\Controllers\ImportController;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;


/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/


Route::get('/', function () {
    return view('welcome');
});





Route::post('Reception/export_followup_tb',[ReceptionController::class,'export'])->name('reception_export');
Route::post('Reception/exportReport0',[Consultation0Controller::class,'report'])->name('reception_report_export0');
Route::post('Reception/exportReport1',[Consultation1Controller::class,'report'])->name('reception_report_export1');


//
 Route::get('Reception/report0',[Consultation0Controller::class,'report_view'])->name('consultation_report_view0');
 Route::post('Reception/report0',[Consultation0Controller::class,'report_cal'])->name('consultation_report_cal0');

 Route::get('Reception/report1',[Consultation1Controller::class,'report_view'])->name('consultation_report_view1');
 Route::post('Reception/report1',[Consultation1Controller::class,'report_cal'])->name('consultation_report_cal1');
 


Route::post('Counsellor/export',[CounsellingController::class,'export_starter'])->name('counsellor_export');



Route::post('import/lab_hiv_import',[LabimportController::class,'lab_hts_data'])->name('lab_hiv_import');





//Server Dispensing
Route::get("ServerComsumption/ComsumptionReport", [ServerComsumptionReportController::class, "dispense_viewReport"]);
Route::post('/search-reportDispensing', [ServerComsumptionReportController::class, "serverReport"])->name('searchReport');
Route::post('ServerComsumption/viewExport', [ServerComsumptionReportController::class, "viewExportStock"])->name('viewExport');
Route::post('ServerComsumption/ComsumptionReport', [ServerComsumptionReportController::class, "export"])->name('export-all');

// Management
Route::get('Manage/users',[ManageController::class,'user']);
Route::post('Manage/user',[ManageController::class,'add_user'])->name('add_user');
Route::get('Manage/users_list',[ManageController::class,'user_list']);

Route::get('Manage/announcement',[AnnounceController::class,'announcement']);
Route::post('Manage/announcement',[AnnounceController::class,'announcement_add'])->name('ann_add');

Route::get('Manage/key',[AnnounceController::class,'key_view']);
Route::post('Manage/key',[AnnounceController::class,'key'])->name('key');

Route::get('Manage/info',[AnnounceController::class,'info']);





///RiskLog
Route::get('RiskHistory/risk_history', [RiskLogController::class, 'risk_log_View'])->name("risk_log_view");
Route::post('RiskHistory/risk_history', [RiskLogController::class, 'risk_log'])->name("risk_log_data");




Route::post('import/GeneralPatientImport', [ImportController::class,'importer_select'])->name('general_import');// This is for follow up

// 
Route::get("MME/mme_export", [MME_ExportController::class, "mme_export_View"])->name("mme_exportview");
Route::post("MME/mme_export", function (Request $request) {

    $validator = Validator::make($request->all(), [
        "road" => "required",
        'clinics' => 'required|array|min:1', // Ensure it's an array with at least one item
        'clinics.*' => 'string|in:Office,All,0,1,2,3,4,5,6', // Validate each item if necessary
        'exportQuarter' => 'required|string',
        'From_date' => [
            'required_if:exportQuarter,ByDate',
            'date',
        ],
        'To_date' => [
            'required_if:exportQuarter,ByDate',
            'date',
        ],
    ]);
    if ($validator->fails()) {
        return redirect()->back()->withErrors($validator)->withInput();
    }
    if ($request["exportQuarter"] == "All Data") {
        $request["From_date"] = "01-01-2000";
        $request["To_date"] = today()->format('d-m-Y');
    }
    if($request['road']==12){
        if($request["other"]=='bio test'||'office Hiv test'){
            $request['dateFrom']=$request['From_date'];
            $request['dateTo']=$request["To_date"];
            if($request["other"]=='bio test'){
                $request['testNN']='bio';
            }else{
                $request['testNN']='hiv';
            }
            $fullControllerName='App\Http\Controllers\\OfficeLab\\LabOfficeController';
            $methodName='export';
            return app()->call("$fullControllerName@$methodName");
        }
    }
    if ($request['road'] == 1) {
        if ($request["other"] == 'bio test' || $request["other"] == 'office hiv test') {
            $request['dateFrom'] = $request['From_date'];
            $request['dateTo'] = $request["To_date"];
            if ($request["other"] == 'bio test') {
                $request['testNN'] = 'bio';
            } else {
                $request['testNN'] = 'hiv';
            }
            $fullControllerName = 'App\Http\Controllers\\OfficeLab\\LabOfficeController';
            $methodName = 'export';
            return app()->call("$fullControllerName@$methodName");
        }
    }
    if ($request["clinics"][0] == "All") {
        $request["clinics"] = [0, 1, 2, 3, 4, 5, 6];
    }

    $request["From_date"] = date("Y-m-d", strtotime($request["From_date"]));
    $request["To_date"] = date("Y-m-d", strtotime($request["To_date"]));
    switch ($request["road"]) {
        case "0":
            $fullControllerName = "App\Http\Controllers\serverExport\\ReceptionController";
            $methodName = 'Reception_Export';
            break;
        case "1":
            $fullControllerName = "App\Http\Controllers\serverExport\\LabController";
            $methodName = 'Lab_Export';
            break;
        case "13":
            $fullControllerName = "App\Http\Controllers\serverExport\\FeedingCenterController";
            $methodName = 'feedingExport';
            break;
        case "14":
            $fullControllerName = "App\Http\Controllers\serverExport\\HbvRegisterController";
            $methodName = 'hbvRegisterExport';
            break;
        case "15":
            $fullControllerName = "App\Http\Controllers\serverExport\\HtsReportController";
            $methodName = 'calculated_report';
            break;
        case "16":
            $fullControllerName = "App\Http\Controllers\serverExport\\CervicalCancerController";
            $methodName = 'cervicalExport';
            break;
        case "17":
            $fullControllerName = "App\Http\Controllers\serverExport\\AncController";
            $methodName = 'AncExport';
            break;
        default:
            $fullControllerName = "App\Http\Controllers\\MME_ExportController";
            $methodName = 'mme_export';
            break;
    }
    if (class_exists($fullControllerName) && method_exists($fullControllerName, $methodName)) {
        return app()->call("$fullControllerName@$methodName");
    } else {
        return response()->json(["error" => "Controller or method not found"], 404);
    }
})->name("mme_export");




// 
Route::get("MME/serverRiskLog", [ServerRiskLogController::class, "risk_log_View"]);
Route::post("MME/serverRiskLog", [ServerRiskLogController::class, "risk_log"])->name("server_risk_log_data");

//
Route::get("MME/Dashboard/mneDiagnosisDashboard", [MME_DashboardController::class, "mme_dashboard_View"]);
Route::post("MME/Dashboard/mneDiagnosisDashboard", [MME_DashboardController::class, "mme_dashboard_Calculate"])->name("mne_dashboard");

Route::get('Monitor/entryCount',[EntrycountController::class,'view']);
Route::post('Monitor/entryCount',[EntrycountController::class,'counter'])->name('counter');
Route::post('Monitor/entryCount/difference-ids',[EntrycountController::class,'ncdVisitDifferenceIds'])->name('counter.difference.ids');

Route::get('Prevention/gps_map', [PreventionGpsMapController::class, 'index'])
    ->middleware('auth')
    ->name('prevention.gps_map');
Route::get('Prevention/gps_map/points', [PreventionGpsMapController::class, 'points'])
    ->middleware('auth')
    ->name('prevention.gps_map.points');

Route::get('Labs/duplicateFinder', [FinderController::class, 'finder_view']);
Route::post('Labs/duplicateFinder', [FinderController::class, 'finder'])->name('finder');

//Mental Health



Route::get('/OfficeLab/OfficeLab', function () {
    return view('OfficeLab/OfficeLab'); // Create this blade file
})->middleware(['auth'])->can('office-lab');

Route::prefix('OfficeLab')->group(function () {
    Route::post('/Search', [LabOfficeController::class, 'search'])->name('OfficeLab.Search');
    Route::post('/md-initials', [LabOfficeController::class, 'mdInitials'])->name('OfficeLab.md-initials');
    Route::post('/BioStore', [LabOfficeController::class, 'bioStore'])->name('OfficeLab.BioStore');
    Route::post('/HivStore', [LabOfficeController::class, 'hivStore'])->name('OfficeLab.HivStore');
     Route::post('/BioUpdate', [LabOfficeController::class, 'bioUpdate'])->name('OfficeLab.BioUpdate');
    Route::post('/HivUpdate', [LabOfficeController::class, 'hivUpdate'])->name('OfficeLab.HivUpdate');
    Route::post('/fill-to-data', [LabOfficeController::class, 'fillerData'])->name('OfficeLab.fill-to-data');
    Route::get('/searchId', [LabOfficeController::class, 'updateFind'])->name('OfficeLab.searchId');
    Route::post('/TestRecord', [LabOfficeController::class, 'testRecord'])->name('OfficeLab.TestRecord');
    Route::post('/office-lab-export', [LabOfficeController::class, 'export'])->name('OfficeLab.office-lab-export');
    Route::post('/office-print', [LabOfficeController::class, 'officePrint'])->name('OfficeLab.office-print');
    Route::delete('/office-delete', [LabOfficeController::class, 'officeDelete'])->name('OfficeLab.office-delete');


   
});
// For Clinic Lab modules in Office Lab
Route::get('/OfficeLab/ClinicLab', function () {
    return view('OfficeLab/ClinicLab'); // Create this blade file
})->middleware(['auth'])->can('office-lab');
Route::post('/lab-tests', [App\Http\Controllers\OfficeLab\CliniclabController::class, 'labResponse'])->name('lab-tests');
Route::get('/Cliniclab/export', [CliniclabController::class, 'export'])
     ->name('cliniclab.export');
     










//ANC
/*
|--------------------------------------------------------------------------
| ANC Module Routes
|--------------------------------------------------------------------------
*/




// Cervical Cancer
Route::post("Cervical_cancer/screnning1", [Cervicalcancerscrenning1Controller::class, "cc_data"])->name("cc_data1");

//Fuchia Art
// routes/web.php


Route::prefix('services')->name('services.')->group(function () {
    Route::get('/', [ServicesController::class, 'index'])->name('index');
    Route::match(['get', 'post'], '/search', [ServicesController::class, 'searchPatient'])->name('search');
    Route::post('/save', [ServicesController::class, 'store'])->name('save');
    Route::post('/update-identifiers', [ServicesController::class, 'updateIdentifiers'])->name('update.identifiers');
    Route::get('/labs/{pid}', [ServicesController::class, 'labs'])->name('labs');
    Route::get('/export', [ServicesController::class, 'export'])->name('export');
    Route::post('/appointments/preview', [ServicesController::class, 'previewAppointments'])->name('appointment.preview');
    Route::post('/missed/preview', [ServicesController::class, 'previewMissed'])->name('missed.preview');
    Route::post('/import', [ServicesController::class, 'import'])->name('import');
    Route::get('/template/{type}', [ServicesController::class, 'template'])->name('template');
});

Route::middleware('auth')->prefix('api/art')->name('api.art.')->group(function () {
    Route::get('/sync', [ServicesController::class, 'downloadSync'])->name('sync.download');
    Route::post('/sync', [ServicesController::class, 'uploadSync'])->name('sync.upload');
});

Route::get('/manifest.json', function () {
    return response()->file(public_path('manifest.json'));
})->name('pwa.manifest');

Route::get('/service-worker.js', function () {
    return response()
        ->file(public_path('service-worker.js'))
        ->header('Content-Type', 'application/javascript');
})->name('pwa.sw');

Route::get("/clinic_dashboard", [DashboardController::class, "index"])->name("clinic_dashboard");
Route::get("/clinic_dashboard/yearly-map-points", [DashboardController::class, "yearlyMapPoints"])->name("clinic_dashboard.yearly_map_points");
Route::get("/clinic_dashboard/export", [DashboardController::class, "export"])->name("clinic_dashboard.export");

Route::prefix("/ncd_analysis")->name("ncd_analysis.")->group(function () {
    Route::get("/", [NcdAnalysisController::class, "dashboard"])->name("dashboard");
    Route::post("/run", [NcdAnalysisController::class, "run"])->name("run");
    Route::post("/clear_data", [NcdAnalysisController::class, "clearData"])->name("clear_data");
    Route::get("/export_data", [NcdAnalysisController::class, "exportData"])->name("export_data");
    Route::post("/config", [NcdAnalysisController::class, "updateConfig"])->name("config");
});

Route::middleware("auth")->group(function () {
    Route::get("MME/pre_exports", [PreGeneratedExportController::class, "index"])->name("mme_pre_exports");

    Route::get("MME/pre_exports/download/{file}", [PreGeneratedExportController::class, "download"])->name("mme_pre_exports.download");

});




//STI report
/* STI Report Routes */
Route::controller(StiReportController::class)->group(function () {
    Route::get("Reports/STI_Report", "stiReport_View")->name("stiReport");
    Route::post("Reports/STI_Report", "stiReport_Calculator")->name("sticalculate");
    Route::get("Reports/STI_Report/export", "stiReport_Export")->name("stiReport.export");
});

Auth::routes();
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
