<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Backend\Payroll\SalaryController;
use App\Http\Controllers\Backend\Finance\DepositController;
use App\Http\Controllers\Backend\Payroll\AdvanceController;
use App\Http\Controllers\Backend\Payroll\CommissionController;
use App\Http\Controllers\Backend\Finance\TransactionController;
use App\Http\Controllers\Backend\Payroll\AdvanceTypeController;
use App\Http\Controllers\Backend\Payroll\SalarySetUpController;
use App\Http\Controllers\Backend\Finance\PayrollAccountController;
use App\Http\Controllers\Backend\Payroll\EmployeeAdjustmentController;
use App\Http\Controllers\Backend\Payroll\BulkAdjustmentController;
use App\Http\Controllers\Backend\Payroll\BankFileController;
use App\Http\Controllers\Backend\Finance\CompanyBankAccountController;



Route::group(['middleware' => ['xss','admin', 'TimeZone', 'FeatureCheck:payroll'], 'prefix' => 'hrm'], function () {
   // payroll commission route
   Route::controller(CommissionController::class)->prefix('payroll/item')->group(function () {
      Route::any('/', 'index')->name('hrm.payroll_items.index')->middleware('PermissionCheck:commission_read');
      Route::get('create', 'create')->name('hrm.payroll_items.create')->middleware('PermissionCheck:commission_create');

      Route::post('delete-data',   'deleteData')->name('payroll_items.delete_data')->middleware('PermissionCheck:commission_delete');
      Route::post('status-change', 'statusUpdate')->name('payroll_items.statusUpdate')->middleware('PermissionCheck:commission_update');

      Route::get('edit/{id}', 'edit')->name('hrm.payroll_items.edit')->middleware('PermissionCheck:commission_update');
      Route::post('update/{id}/{company_id}', 'update')->name('hrm.payroll_items.update')->middleware('PermissionCheck:commission_update');

      Route::get('/datatable', 'datatable')->name('hrm.payroll_items.datatable')->middleware('PermissionCheck:commission_read');
      Route::post('store', 'store')->name('hrm.payroll_items.store')->middleware('PermissionCheck:commission_create');
      Route::get('delete/{id}', 'delete')->name('hrm.payroll_items.delete')->middleware('PermissionCheck:commission_delete');
      Route::get('show/{id}', 'show')->name('hrm.payroll_items.show')->middleware('PermissionCheck:commission_read');
   });

   // payroll salary setup route
   Route::controller(SalarySetUpController::class)->prefix('payroll')->group(function () {
      Route::any('setup', 'index')->name('hrm.payroll_setup.index')->middleware('PermissionCheck:setup_read');
      // set commission
      Route::get('user-commission-set/{id}', 'commissionSetUp')->name('hrm.payroll_setup.user_commission_setup')->middleware('PermissionCheck:set_commission');
      Route::get('get-item-list-modal', 'item_list_create_modal')->name('hrm.payroll_setup.item_list')->middleware('PermissionCheck:set_commission');
      Route::post('create-salary-setup/{id}', 'create_user_commission_setup')->name('hrm.payroll_setup.create_user_commission_setup')->middleware('PermissionCheck:set_commission');

      Route::get('edit-set-commission-modal/{id}', 'item_list_edit_modal')->name('hrm.payroll_setup.item_list_edit_modal')->middleware('PermissionCheck:set_commission');
      Route::post('update-commission-setup/{id}', 'update_user_commission_setup')->name('hrm.payroll_setup.update_user_commission_setup')->middleware('PermissionCheck:set_commission');

      Route::get('delete-salary-setup/{id}', 'delete_salary_setup')->name('hrm.payroll_setup.delete_salary_setup')->middleware('PermissionCheck:delete_payroll_set');


      Route::post('update-salary-setup/{id}', 'update_salary_setup')->name('hrm.payroll_setup.update_salary_setup')->middleware('PermissionCheck:update_payroll_set');
      Route::get('user-setup/{id}/{slug}', 'profileSetUp')->name('hrm.payroll_setup.user_setup')->middleware('PermissionCheck:set_contract');
      Route::post('user-setup-update/{id}/{slug}', 'profileSetUpdate')->name('hrm.payroll_setup.user_setup_update')->middleware('PermissionCheck:set_contract');

      Route::get('setup/datatable', 'data')->name('hrm.payroll_setup.datatable')->middleware('PermissionCheck:list_payroll_set');
      Route::get('setup/{id}', 'setup')->name('hrm.payroll_setup.setup')->middleware('PermissionCheck:view_payroll_set');
      // 

      Route::post('store-salary-setup', 'store_salary_setup')->name('hrm.payroll_setup.store_salary_setup')->middleware('PermissionCheck:store_payroll_set');
      Route::get('edit-salary-setup/{id}', 'edit_salary_setup')->name('hrm.payroll_setup.edit_salary_setup')->middleware('PermissionCheck:edit_payroll_set');
   });


   // payroll advance type route

   Route::controller(AdvanceTypeController::class)->prefix('payroll/advance-type')->group(function () {
      Route::any('/', 'index')->name('hrm.payroll_advance_type.index')->middleware('PermissionCheck:advance_type_read');
      Route::get('create', 'create')->name('hrm.payroll_advance_type.create')->middleware('PermissionCheck:advance_type_create');
      Route::get('edit/{id}', 'edit')->name('hrm.payroll_advance_type.edit')->middleware('PermissionCheck:advance_type_update');

      Route::get('/datatable', 'datatable')->name('hrm.payroll_advance_type.datatable')->middleware('PermissionCheck:advance_type_read');
      Route::post('store', 'store')->name('hrm.payroll_advance_type.store')->middleware('PermissionCheck:advance_type_create');
      Route::post('update/{id}/{company_id}', 'update')->name('hrm.payroll_advance_type.update')->middleware('PermissionCheck:advance_type_update');
      Route::get('delete/{id}', 'delete')->name('hrm.payroll_advance_type.delete')->middleware('PermissionCheck:advance_type_delete');
      Route::get('show/{id}', 'show')->name('hrm.payroll_advance_type.show')->middleware('PermissionCheck:advance_type_read');


      Route::post('status-change',           'statusUpdate')->name('payroll_advance_type.statusUpdate')->middleware('PermissionCheck:advance_type_update');
      Route::post('delete-data',             'deleteData')->name('payroll_advance_type.delete_data')->middleware('PermissionCheck:advance_type_delete');
   });

   // payroll advance salary route

   Route::controller(AdvanceController::class)->prefix('payroll/advance-salary')->group(function () {
      Route::any('/', 'index')->name('hrm.payroll_advance_salary.index')->middleware('PermissionCheck:advance_read');

      Route::get('/datatable', 'datatable')->name('hrm.payroll_advance_salary.datatable')->middleware('PermissionCheck:advance_read');

      Route::get('create', 'create')->name('hrm.payroll_advance_salary.create')->middleware('PermissionCheck:advance_create');
      Route::post('store', 'store')->name('hrm.payroll_advance_salary.store')->middleware('PermissionCheck:advance_create');
      Route::get('show/{id}', 'show')->name('hrm.payroll_advance_salary.show')->middleware('PermissionCheck:advance_read');
      Route::get('edit/{id}', 'edit')->name('hrm.payroll_advance_salary.edit')->middleware('PermissionCheck:advance_update');
      Route::post('update/{id}/{company_id}', 'update')->name('hrm.payroll_advance_salary.update')->middleware('PermissionCheck:advance_update');
      Route::get('delete/{id}', 'delete')->name('hrm.payroll_advance_salary.delete')->middleware('PermissionCheck:advance_delete');

      Route::get('approve-modal/{id}', 'approveModal')->name('hrm.payroll_advance_salary.approve_modal')->middleware('PermissionCheck:advance_approved');

      Route::post('approve/{id}', 'approve')->name('hrm.payroll_advance_salary.approve')->middleware('PermissionCheck:advance_approved');
      Route::get('pay/{id}', 'pay')->name('hrm.payroll_advance_salary.pay')->middleware('PermissionCheck:advance_pay');
      Route::post('pay-store/{id}', 'payStore')->name('hrm.payroll_advance_salary.pay_store')->middleware('PermissionCheck:advance_pay');
      Route::get('invoice/{id}', 'invoice')->name('hrm.payroll_advance_salary.invoice')->middleware('PermissionCheck:advance_read');
   });


   // Employee Adjustments Route (Ajustes empleados — ingresos/deducciones por empleado)
   Route::controller(EmployeeAdjustmentController::class)->prefix('payroll/adjustments')->group(function () {
      Route::any('/', 'index')->name('hrm.payroll_adjustments.index')->middleware('PermissionCheck:set_commission');
      Route::get('employee-data/{id}', 'getEmployeeData')->name('hrm.payroll_adjustments.employee_data')->middleware('PermissionCheck:set_commission');
      Route::get('create-modal', 'createModal')->name('hrm.payroll_adjustments.create_modal')->middleware('PermissionCheck:set_commission');
      Route::post('store/{user_id}', 'store')->name('hrm.payroll_adjustments.store')->middleware('PermissionCheck:set_commission');
      Route::get('edit-modal/{id}', 'editModal')->name('hrm.payroll_adjustments.edit_modal')->middleware('PermissionCheck:set_commission');
      Route::post('update/{id}', 'update')->name('hrm.payroll_adjustments.update')->middleware('PermissionCheck:set_commission');
      Route::get('delete/{id}', 'destroy')->name('hrm.payroll_adjustments.delete')->middleware('PermissionCheck:set_commission');
   });

   // Bulk Adjustments Route (Asignación masiva de ingresos/descuentos)
   Route::controller(BulkAdjustmentController::class)->prefix('payroll/bulk-adjustments')->group(function () {
      Route::get('/', 'index')->name('hrm.payroll_bulk_adjustments.index')->middleware('PermissionCheck:set_commission');
      Route::get('load-employees', 'loadEmployees')->name('hrm.payroll_bulk_adjustments.load_employees')->middleware('PermissionCheck:set_commission');
      Route::post('store', 'store')->name('hrm.payroll_bulk_adjustments.store')->middleware('PermissionCheck:set_commission');
   });

   // Salary Route
   Route::controller(SalaryController::class)->prefix('payroll/salary')->group(function () {
      Route::any('/', 'index')->name('hrm.payroll_salary.index')->middleware('PermissionCheck:salary_read');
      Route::get('/datatable', 'datatable')->name('hrm.payroll_salary.datatable')->middleware('PermissionCheck:salary_read');
      Route::get('generate-modal', 'generateModal')->name('hrm.payroll_salary.generate_modal')->middleware('PermissionCheck:salary_create');
      Route::post('generate', 'generate')->name('hrm.payroll_salary.generate')->middleware('PermissionCheck:salary_create');
      Route::get('salary-report', 'salaryReport')->name('hrm.payroll_salary.salary-report')->middleware('PermissionCheck:salary_read');


      Route::post('store', 'store')->name('hrm.payroll_salary.store')->middleware('PermissionCheck:salary_create');
      Route::get('edit/{id}', 'edit')->name('hrm.payroll_salary.edit')->middleware('PermissionCheck:salary_update');
      Route::post('update/{id}/{company_id}', 'update')->name('hrm.payroll_salary.update')->middleware('PermissionCheck:salary_update');
      Route::get('delete/{id}', 'delete')->name('hrm.payroll_salary.delete')->middleware('PermissionCheck:salary_delete');
      Route::get('show/{id}', 'show')->name('hrm.payroll_salary.show')->middleware('PermissionCheck:salary_read');

      //calculate salary route
      Route::get('calculate-modal/{id}', 'calculateModal')->name('hrm.payroll_salary.calculate_modal')->middleware('PermissionCheck:salary_calculate');
      Route::post('calculate/{id}', 'calculate')->name('hrm.payroll_salary.calculate')->middleware('PermissionCheck:salary_calculate');


      Route::get('pay/{id}', 'pay')->name('hrm.payroll_salary.pay')->middleware('PermissionCheck:salary_pay');
      Route::post('pay-store/{id}', 'payStore')->name('hrm.payroll_salary.pay_store')->middleware('PermissionCheck:salary_pay');
      Route::get('payslip/{id}', 'invoice')->name('hrm.payroll_salary.invoice')->middleware('PermissionCheck:salary_payslip');

      Route::any('/salary-sheet', 'salaryTable')->name('hrm.monthly.salary.table')->middleware('PermissionCheck:salary_payslip');
      Route::any('/get-salary-sheet', 'getSalaryTable')->name('hrm.get.monthly.salary.table')->middleware('PermissionCheck:salary_payslip');
      Route::any('/get-salary-generated-department', 'getSalaryGeneratedDepartment')->name('hrm.get.salary.generated.department')->middleware('PermissionCheck:salary_payslip');
      Route::get('payslip_print/{id}', 'invoice_print')->name('hrm.payroll_salary.invoice_print')->middleware('PermissionCheck:salary_payslip');

      // Descuentos de Ley - Preview (ISSS, AFP, Renta)
      Route::post('calculate-legal-deductions', 'calculateLegalDeductions')->name('hrm.payroll_salary.calculate_legal_deductions');
      Route::get('legal-deductions-brackets', 'getLegalDeductionsBrackets')->name('hrm.payroll_salary.legal_deductions_brackets');

      // Exportar Planilla de Sueldos (formato Excel)
      Route::get('export-planilla', 'exportPlanilla')->name('hrm.payroll_salary.export_planilla')->middleware('PermissionCheck:salary_read');

      // Eliminar planilla completa de una quincena
      Route::post('delete-bulk', 'deleteBulk')->name('hrm.payroll_salary.delete_bulk')->middleware('PermissionCheck:salary_delete');
   });

   // Punto 2 — Cuentas bancarias empresariales (CRUD)
   Route::controller(CompanyBankAccountController::class)
      ->prefix('payroll/company-bank-accounts')
      ->group(function () {
         Route::get('/', 'index')->name('hrm.company_bank_accounts.index');
         Route::post('store', 'store')->name('hrm.company_bank_accounts.store');
         Route::put('update/{id}', 'update')->name('hrm.company_bank_accounts.update');
         Route::delete('delete/{id}', 'destroy')->name('hrm.company_bank_accounts.destroy');
      });

   // Punto 2 — Generar archivo para banco (PDF / Excel)
   Route::controller(BankFileController::class)
      ->prefix('payroll/bank-file')
      ->group(function () {
         Route::get('/', 'index')->name('hrm.payroll.bank_file.index');
         Route::post('generate', 'generate')->name('hrm.payroll.bank_file.generate');
      });

   // Punto 3 — Reportes de Planilla (Ingresos / Descuentos en PDF y Excel)
   Route::controller(\App\Http\Controllers\Backend\Payroll\PayrollReportController::class)
      ->prefix('payroll/reports')
      ->group(function () {
         Route::get('/', 'index')->name('hrm.payroll.reports.index');
         Route::post('incomes', 'incomes')->name('hrm.payroll.reports.incomes');
         Route::post('deductions', 'deductions')->name('hrm.payroll.reports.deductions');
      });
});
