<?php


namespace App\SuperAdmin\Http\Controllers\Front;

class GeneratefolderfilesController extends FrontBaseController
{
    public function generate_folder_files()
    {

        error_reporting(E_ALL);
ini_set('display_errors', 1);
        if (!(url('/') == 'http://hrmifly-saas.test')) {
            return redirect()->route('front.index');
        }
        // Files Paths

        $modified_files = [
            'DB_updates.txt',
            'app/Classes/CommonHrm.php',
            'app/Classes/LangTrans.php',
            'app/Classes/Notify.php',
            'app/Classes/Payrolls.php',
            'app/Exports/AttendanceExport.php',
            'app/Exports/AttendanceStaticExport.php',
            'app/Exports/ExpenseExport.php',
            'app/Exports/LangExport.php',
            'app/Exports/LangStaticExport.php',
            'app/Exports/UsersStaticExport.php',
            'app/Http/Controllers/Api/AssetController.php',
            'app/Http/Controllers/Api/AttendanceController.php',
            'app/Http/Controllers/Api/AuthController.php',
            'app/Http/Controllers/Api/CompanyController.php',
            'app/Http/Controllers/Api/EmailTemplateController.php',
            'app/Http/Controllers/Api/ExpenseCategoryController.php',
            'app/Http/Controllers/Api/ExpenseController.php',
            'app/Http/Controllers/Api/HrmDashboardController.php',
            'app/Http/Controllers/Api/LeaveController.php',
            'app/Http/Controllers/Api/LeaveTypeController.php',
            'app/Http/Controllers/Api/PdfController.php',
            'app/Http/Controllers/Api/Self/ExpenseController.php',
            'app/Http/Controllers/Api/Self/LeaveController.php',
            'app/Http/Controllers/Api/Self/NewsController.php',
            'app/Http/Requests/Api/Attendance/ImportRequest.php',
            'app/Http/Requests/Api/Attendance/UserAttendaceRequest.php',
            'app/Http/Requests/Api/Auth/UploadFileRequest.php',
            'app/Http/Requests/Api/Leave/PaidLeavesRequest.php',
            'app/Http/Requests/Api/User/StoreRequest.php',
            'app/Http/Requests/Api/User/UpdateRequest.php',
            'app/Imports/AttendanceImport.php',
            'app/Imports/UserImport.php',
            'app/Models/BasicSalaryDetails.php',
            'app/Models/Company.php',
            'app/Models/EmployeeSpecificLeaveCount.php',
            'app/Models/LeaveType.php',
            'app/Models/SubscriptionPlan.php',
            'app/Models/User.php',
            'app/Observers/EmployeeSpecificLeaveCountObserver.php',
            'app/Providers/EventServiceProvider.php',
            'app/SuperAdmin/Http/Controllers/Api/CompanyController.php',
            'app/SuperAdmin/Http/Controllers/Api/SuperAdminAuthController.php',
            'app/SuperAdmin/Http/Controllers/Front/GeneratefolderfilesController.php',
            'app/SuperAdmin/Http/Controllers/Front/HomeController.php',
            'app/SuperAdmin/routes/front.php',
            'app/Traits/UserTraits.php',
            'composer.lock',
            'database/2.1.0-updates.sql',
            'database/migrations/2021_01_02_193007_create_companies_table.php',
            'database/migrations/2025_07_19_045304_create_employee_specific_leave_counts_table.php',
            'database/migrations/2025_08_13_083042_add_column_in_companies_table.php',
            'database/seeders/CustomFieldsSeeder.php',
            'database/seeders/DatabaseSeeder.php',
            'database/seeders/ExpenseSeeder.php',
            'favicon.ico',
            'favicon_io/android-chrome-192x192.png',
            'favicon_io/android-chrome-512x512.png',
            'favicon_io/apple-touch-icon.png',
            'favicon_io/favicon-16x16.png',
            'favicon_io/favicon-32x32.png',
            'favicon_io/favicon.ico',
            'hrmifly_sass.sql',
            'public/favicon.ico',
            'public/images/dark.png',
            'public/images/light.png',
            'public/images/login_background.svg',
            'public/images/sample_attendance.csv',
            'public/images/small_dark.png',
            'public/images/small_light.png',
            'public/manifest.json',
            'public/superadmin_version.txt',
            'public/version.txt',
            'resources/js/app.js',
            'resources/js/common/components/common/card/StateWidget.vue',
            'resources/js/common/components/map/LeafletMap.vue',
            'resources/js/common/composable/apiAdmin.js',
            'resources/js/common/composable/common.js',
            'resources/js/common/core/ui/Import original.vue',
            'resources/js/common/core/ui/Import.vue',
            'resources/js/common/layouts/LeftSidebar.vue',
            'resources/js/common/layouts/TopBar.vue',
            'resources/js/main/components/pdf/PdfDownload.vue',
            'resources/js/main/components/report-exports/PdfTable.vue',
            'resources/js/main/config/theme/themeVariables.js',
            'resources/js/main/router/leaves.js',
            'resources/js/main/router/staffBar.js',
            'resources/js/main/store/authStore.js',
            'resources/js/main/views/Dashboard.vue',
            'resources/js/main/views/LoadingApp.vue',
            'resources/js/main/views/accountings/accounts/AccountEntries.vue',
            'resources/js/main/views/accountings/expense-categories/AddEdit.vue',
            'resources/js/main/views/accountings/expense-categories/fields.js',
            'resources/js/main/views/accountings/expense-categories/index.vue',
            'resources/js/main/views/accountings/expenses/AddEdit.vue',
            'resources/js/main/views/accountings/expenses/ExpenseEntry.vue',
            'resources/js/main/views/accountings/expenses/fields.js',
            'resources/js/main/views/accountings/expenses/index.vue',
            'resources/js/main/views/admin-dashboard/ClockInOut.vue',
            'resources/js/main/views/admin-dashboard/Holiday.vue',
            'resources/js/main/views/admin-dashboard/IncrementPromotion.vue',
            'resources/js/main/views/admin-dashboard/MarkTodayAttendance.vue',
            'resources/js/main/views/admin-dashboard/PendingLeaves.vue',
            'resources/js/main/views/admin-dashboard/WeekendHoliday.vue',
            'resources/js/main/views/admin-dashboard/WorkAnniversay.vue',
            'resources/js/main/views/attendances/attendance/AttendanceEntry.vue',
            'resources/js/main/views/attendances/attendance/BulkAttendance.vue',
            'resources/js/main/views/attendances/attendance/fields.js',
            'resources/js/main/views/attendances/attendance/index.vue',
            'resources/js/main/views/attendances/details/LocationDetails.vue',
            'resources/js/main/views/auth/Login.vue',
            'resources/js/main/views/common/settings/email/SendMailSetting.vue',
            'resources/js/main/views/common/settings/translations/langs/index.vue',
            'resources/js/main/views/hrm-settings/HrmSetting.vue',
            'resources/js/main/views/leave/leave-types/AddEdit.vue',
            'resources/js/main/views/leave/leave-types/EmployeeSpecificLeaveCount.vue',
            'resources/js/main/views/leave/leave-types/fields.js',
            'resources/js/main/views/leave/leave-types/index.vue',
            'resources/js/main/views/leave/leaves/AddEdit.vue',
            'resources/js/main/views/leave/leaves/index.vue',
            'resources/js/main/views/leave/leaves/leavesTable.vue',
            'resources/js/main/views/leave/paid-leaves/fields.js',
            'resources/js/main/views/leave/paid-leaves/index.vue',
            'resources/js/main/views/leave/unpaid-leaves/fields.js',
            'resources/js/main/views/leave/unpaid-leaves/index.vue',
            'resources/js/main/views/payrolls/basic-salary/BasicSalary.vue',
            
            'resources/js/main/views/self/appreciations/index.vue',
            'resources/js/main/views/self/holidays/index.vue',
            'resources/js/main/views/self/leave/leaves/AddEdit.vue',
            'resources/js/main/views/self/leave/leaves/View.vue',
            'resources/js/main/views/self/leave/leaves/index.vue',
            'resources/js/main/views/self/leave/paid-leaves/index.vue',
            'resources/js/main/views/self/offboardings/resignations/View.vue',
          
            'resources/js/main/views/self/self-dashboard/AssignedSurvey.vue',
            'resources/js/main/views/self/self-dashboard/Attendance.vue',
            'resources/js/main/views/self/self-dashboard/Birthday.vue',
            'resources/js/main/views/self/self-dashboard/SelfIncrementPromotion.vue',
            'resources/js/main/views/self/self-dashboard/SelfWeekendHoliday.vue',
            'resources/js/main/views/self/self-dashboard/SelfWorkAnniversay.vue',
            'resources/js/main/views/settings/SettingSidebar.vue',
            'resources/js/main/views/settings/company/Edit.vue',
            'resources/js/main/views/settings/email/Edit.vue',
            'resources/js/main/views/settings/mail-settings/Edit.vue',
            'resources/js/main/views/settings/pdf-fonts/PdfFontSettings.vue',
            'resources/js/main/views/settings/translations/index.vue',
            'resources/js/main/views/settings/translations/langs/index.vue',
            'resources/js/main/views/staff-members/shifts/AddEdit.vue',
            'resources/js/main/views/staff-members/users/AddEdit.vue',
            'resources/js/main/views/staff-members/users/fields.js',
            'resources/js/main/views/staff-members/users/index.vue',
            'resources/js/superadmin/layouts/LoadingApp.vue',
            'resources/js/superadmin/layouts/TopBar.vue',
            'resources/js/superadmin/views/SetupSuperAdminApp.vue',
            'resources/js/superadmin/views/admin/PaymentMethods/PaypalGateway.vue',
            
            'resources/less/custom.less',
            'resources/views/layouts/pdf.blade.php',
            'resources/views/pdf/export.blade.php',
            'resources/views/pdf/payroll.blade.php',
            'resources/views/pdf/payrollold.blade.php',
            'resources/views/welcome.blade.php',
            'routes/app.php',
            'routes/self.php',
            'routes/web.php',
            'resources/js/main/views/payrolls/payroll/addSalary.vue',
            'resources/js/main/views/payrolls/payroll/index.vue',
            'resources/js/main/views/self/payrolls/payroll/AddEdit.vue',
            'resources/js/main/views/self/payrolls/payroll/index.vue',
            'resources/lang/ar/installer_messages.php',
            'resources/lang/ar/messages.php',
            'resources/lang/de/installer_messages.php',
            'resources/lang/de/messages.php',
            'resources/lang/es/installer_messages.php',
            'resources/lang/es/messages.php',
            'resources/lang/et/installer_messages.php',
            'resources/lang/et/messages.php',
            'resources/lang/fa/installer_messages.php',
            'resources/lang/fa/messages.php',
            'resources/lang/fr/installer_messages.php',
            'resources/lang/fr/messages.php',
            'resources/lang/gr/installer_messages.php',
            'resources/lang/gr/messages.php',
            'resources/lang/it/installer_messages.php',
            'resources/lang/it/messages.php',
            'resources/lang/nl/installer_messages.php',
            'resources/lang/nl/messages.php',
            'resources/lang/pl/installer_messages.php',
            'resources/lang/pl/messages.php',
            'resources/lang/pt-br/installer_messages.php',
            'resources/lang/pt-br/messages.php',
            'resources/lang/pt/installer_messages.php',
            'resources/lang/pt/messages.php',
            'resources/lang/ro/installer_messages.php',
            'resources/lang/ro/messages.php',
            'resources/lang/ru/installer_messages.php',
            'resources/lang/ru/messages.php',
            'resources/lang/tr/installer_messages.php',
            'resources/lang/tr/messages.php',
            'resources/lang/zh-CN/installer_messages.php',
            'resources/lang/zh-CN/messages.php',
            'resources/lang/zh-TW/installer_messages.php',
            'resources/lang/zh-TW/messages.php',

        ];

        $localpath = 'C:/wamp64/www/';

        foreach ($modified_files as $key => $modified_file) {
            self::createFolders($localpath . 'kiyo_hrm_updates/' . $modified_file);
            self::copyFiles($localpath . 'hrmifly-saas/' . $modified_file, $localpath . 'kiyo_hrm_updates/' . $modified_file);
            echo $modified_file . " --  File copied successfully.<br>";
        }
        die;
    }

    private function createFolders($filePath)
    {
        // Get the directory path from the file path
        $directory = dirname($filePath);

        // Create the directory if it doesn't exist
        if (!file_exists($directory)) {
            // Recursive flag is set to true to create nested directories
            if (!mkdir($directory, 0777, true)) {
                // If unable to create directory, display an error message
                echo "Failed to create directory: $directory";
                return false;
            }
        }
        return true;
    }

    private function copyFiles($source, $destination)
    {
        // Check if source is a directory
        if (is_dir($source)) {
            // Create destination directory if it doesn't exist
            if (!file_exists($destination)) {
                mkdir($destination, 0777, true);
            }

            // Open the source directory to read its contents
            $dir = opendir($source);

            // Iterate through each file/directory in the source directory
            while (false !== ($file = readdir($dir))) {
                if (($file != '.') && ($file != '..')) {
                    // If the current item is a directory, recursively copy its contents
                    if (is_dir($source . '/' . $file)) {
                        copyFiles($source . '/' . $file, $destination . '/' . $file);
                    } else {
                        // If the current item is a file, copy it to the destination
                        copy($source . '/' . $file, $destination . '/' . $file);
                    }
                }
            }

            // Close the source directory handle
            closedir($dir);
        } else {
            // If the source is a file, simply copy it to the destination
            copy($source, $destination);
        }
    }
}
