<?php
/**
 * Handle the form submissions - نیکی ساز
 *
 * @package نیکی ساز
 * @subpackage Niki Saz
 */
class webapp_generator_handler {
    /**
     * Hook 'em all
     */
    public function __construct() {
        add_action( 'admin_init', array( $this, 'handle_form' ) );
    }
    /**
     * Handle the hotel new and edit form
     *
     * @return void
     */
    public function handle_form() {
        global $wpdb;
        if (  !isset( $_POST['submit_app'] )  ) {
            return;
        }
        if(isset( $_POST['submit_app'] )){
            include dirname(__FILE__).'/../hr-databases.php';
            $database=new hr_databases();
            $database->create_table();
            $database->create_intro();
            $database->create_inistalled_app();
            $database->create_tabs();
            $database->create_notification_table();
            if (wp_verify_nonce($_POST['_wpnonce'], 'create_app') || wp_verify_nonce($_POST['_wpnonce'], 'create_notification')|| wp_verify_nonce($_POST['_wpnonce'], 'awg_pwa') || wp_verify_nonce($_POST['_wpnonce'], 'awg_settings')  || wp_verify_nonce($_POST['_wpnonce'], 'create_tab')|| wp_verify_nonce($_POST['_wpnonce'], 'create_intro')) {
                if (wp_verify_nonce($_POST['_wpnonce'], 'create_app')) {
                    // ===== حذف شده: check_finished_apps(); =====
                    
                    if ( ! current_user_can( 'administrator' ) ) {
                        wp_die( __( 'Permission Denied!', 'niki-saz' ) );
                    }
                    $errors   = array();
                    $page_url = admin_url( 'admin.php?page=hd-awg-create' );
                    $app_name = isset( $_POST['app_name'] ) ? ( $_POST['app_name'] ) : '';
                    $app_name_fa= isset( $_POST['app_name_fa'] ) ? ( $_POST['app_name_fa'] ) : '';
                    $splash_color = isset( $_POST['enable_splash'] ) && $_POST['enable_splash']=="on" ? ( $_POST['splash_color_value'] ) : '';
                    $app_version = isset( $_POST['app_version'] ) && $_POST['app_version'] ? ( $_POST['app_version'] ) : '';
                    $splash_text = isset( $_POST['enable_splash'] ) && $_POST['enable_splash']=="on" ? ( $_POST['splash_text'] ) : '';
                    $splash_logo = isset( $_POST['enable_splash'] ) && $_POST['enable_splash']=="on" ? ( $_POST['splash_logo'] ) : '';
                    $splash_time = isset( $_POST['enable_splash'] ) && $_POST['enable_splash']=="on" ? (  (isset( $_POST['splash_time_id'] ) &&  ( $_POST['splash_time_id']=="on" ))? "999" : $_POST['splash_time'] ) : '';
                    $najva_api_key= isset( $_POST['enable_najva_push'] ) && $_POST['enable_najva_push']=="on" ? ( $_POST['najva_api_key'] ) : '';
                    $najva_website_id = isset( $_POST['enable_najva_push'] ) && $_POST['enable_najva_push']=="on" ? ($_POST['najva_website_id'] ) : '';
                    $splash_text_color =  isset( $_POST['enable_splash'] ) && $_POST['enable_splash']=="on" ? ( $_POST['splash_text_color_value'] ) : '';
                    $loading_image = isset( $_POST['loading_image'] ) ? ( $_POST['loading_image'] ) : '';
                    $app_icon = isset( $_POST['app_icon'] ) ? ( $_POST['app_icon'] ) : '';
                    $enable_splash = isset( $_POST['enable_splash'] ) &&  ( $_POST['enable_splash']=="on" ) ? 1 : 0;
                    $enable_najva_push = isset( $_POST['enable_najva_push'] ) &&  ( $_POST['enable_najva_push']=="on" ) ? 1 : 0;
                    $app_url = isset($_POST['app_url'])?get_site_url()."/".$_POST['app_url']:get_site_url();
                    $enable_blank = isset( $_POST['enable_blank'] ) &&  ( $_POST['enable_blank']=="on" ) ? 1 : 0;
                    $enable_mobile_tab = isset( $_POST['enable_mobile_tab'] ) &&  ( $_POST['enable_mobile_tab']=="on" ) ? (plugin_dir_url(__DIR__)."hd-tabs.php") : NULL;
                    $enable_app_intro = isset( $_POST['enable_app_intro'] ) &&  ( $_POST['enable_app_intro']=="on" ) ? (plugin_dir_url(__DIR__)."hd-intro.php") : NULL;
                    $enable_pull_refresh = isset( $_POST['enable_pull_refresh'] ) &&  ( $_POST['enable_pull_refresh']=="on" ) ? 1 : 0;
                    $package_name = isset( $_POST['package_name'] ) ? str_replace("-","", $_POST['package_name']) : '';
                    $app_firebase = isset( $_POST['app_firebase'] ) ? $_POST['app_firebase'] : null;
                    $has_force_update = isset( $_POST['force_update_application'] ) ? 1 : 0;
                    $force_update_application = plugin_dir_url(__DIR__)."checkForUpdate.php";
                    $exit_app = isset( $_POST['exit_app'] ) ? 1 : 0;
                    $app_exit_type = isset( $_POST['app_exit_type'] ) ? $_POST['app_exit_type'] : 1;
                    $is_status_bar_color = isset( $_POST['is_status_bar_color'] ) && $_POST['is_status_bar_color']=="on" ? ( $_POST['status_bar_color'] ) : NULL;
                    $user_id = (wp_get_current_user())->ID;
                    $url =  plugin_dir_url(__DIR__);
                    if (!file_exists(dirname(__FILE__)."/../custom.css")) {
                        $fh = fopen($url."custom.css", 'w');
                        fwrite($fh,  ""."\n");
                    }
                    if (!file_exists(dirname(__FILE__)."/../custom.js")) {
                        $fh = fopen($url."custom.js", 'w');
                        fwrite($fh,  ""."\n");
                    }
                    $custom_css = isset( $_POST['custom_css'] ) &&  ( $_POST['custom_css']=="on" ) ? $url."custom.css" : null;
                    $custom_js = isset( $_POST['custom_js'] ) &&  ( $_POST['custom_js']=="on" ) ? $url."custom.js" : null;
                    $regex = "/^[a-z]\w*(\.[a-z]\w*)\w*(\.[a-z]\w*)+$/i";
                    if (!preg_match($regex,$package_name))
                    {
                        $errors[] = __( "Error: Please enter valid package name", 'niki-saz' );
                    }
                    $app_regex = "/^(\d+\.)?(\d+\.)?(\d+\.)?(\*|\d+)$/";
                    if (!preg_match($app_regex,$app_version))
                    {
                        $errors[] = __( "Error: Please enter valid app version", 'niki-saz' );
                    }
                    if ( !$app_name && !$app_url && !$package_name) {
                        $errors[] = __( "Error: Please fill in all required fields", 'niki-saz' );
                    }
                    
                    // ===== حذف شده: محدودیت تعداد درخواست در روز =====
                    // if(hd_get_today_request()>=6){ ... }
                    
                    // ===== حذف شده: محدودیت ساخت همزمان =====
                    // if(hd_get_is_progress_request()>=1){ ... }
                    
                    if($loading_image){
                        $allowed = array('gif');
                        $ext = pathinfo($loading_image, PATHINFO_EXTENSION);
                        if (!in_array($ext, $allowed)) {
                            $errors[] = __( "Error: You must choice gif image for loading", 'niki-saz' );
                        }
                    }
                    $allowed = array('png');
                    $ext = pathinfo($app_icon, PATHINFO_EXTENSION);
                    if (!in_array($ext, $allowed)) {
                        $errors[] = __( "Error: You must choice png image for the application icon", 'niki-saz' );
                    }
                    if($splash_logo){
                        $allowed = array('png');
                        $ext = pathinfo($splash_logo, PATHINFO_EXTENSION);
                        if (!in_array($ext, $allowed)) {
                            $errors[] = __( "Error: You must choice png image for the splash logo", 'niki-saz' );
                        }
                    }
                    if($app_firebase){
                        $allowed = array('json');
                        $ext = pathinfo($app_firebase, PATHINFO_EXTENSION);
                        if (!in_array($ext, $allowed)) {
                            $errors[] = __( "Error: You must choice json file for firebase push notification", 'niki-saz' );
                        }
                    }
                    $fields = array(
                        'app_name' =>$app_name,
                        'app_name_fa' =>$app_name_fa,
                        'app_url' => $app_url,
                        'app_package_name' =>$package_name,
                        'app_version' =>$app_version,
                        'splash_color' =>$splash_color,
                        'splash_text' =>$splash_text,
                        'splash_logo' =>$splash_logo,
                        'splash_time' =>$splash_time,
                        'splash_text_color' =>$splash_text_color,
                        'loading_image' =>$loading_image,
                        'app_icon' =>$app_icon,
                        'enable_splash' =>$enable_splash,
                        'status' =>0,
                        'user_id' =>$user_id,
                        'najva_api_key' =>$najva_api_key,
                        'najva_website_id' =>$najva_website_id,
                        'enable_najva_push' =>$enable_najva_push,
                        'enable_blank' =>$enable_blank,
                        'is_pull_refresh' =>$enable_pull_refresh,
                        'enable_app_intro' =>$enable_app_intro,
                        'enable_mobile_tab' =>$enable_mobile_tab,
                        'custom_css' =>$custom_css,
                        'custom_js' =>$custom_js,
                        'firebase_file' =>$app_firebase,
                        'force_update_application' =>$force_update_application,
                        'exit_app' =>$exit_app,
                        'status_bar_color' =>$is_status_bar_color,
                        'app_exit_type' =>$app_exit_type,
                        'has_force_update' =>$has_force_update,
                    );
                     $wpdb->get_row("ANALYZE TABLE `".$wpdb->prefix."hd_webapp_generator`" );
                     $getIntro=$wpdb->get_row("SHOW TABLE STATUS LIKE '".$wpdb->prefix."hd_webapp_generator';" );
                    if(!$errors){
                        $fields["app_wp_id"]=$getIntro->Auto_increment??0;
                        
                        // ===== اصلاح شده: حذف چک لایسنس =====
                        // قبل: $state=json_decode(check_app($fields));
                        // بعد:
                        $app_num = $fields["app_wp_id"];
                        $state = (object)array(
                            'status' => 'success',
                            'data' => $app_num
                        );
                        // ====================================
                        
                        if($state->status=="success"){
                            $fields["app_num"] =$state->data;
                        }else{
                            $errors[] =$state->status=="error"?$state->message: __( "Error: Server Error", 'niki-saz' );
                        }
                        unset($fields["app_wp_id"]);
                    }
                    // bail out if error found
                    if ( $errors ) {
                        $first_error = reset( $errors );
                        $redirect_to = add_query_arg( array( 'errors' => str_replace(' ' , '+',$first_error) ), $page_url );
                        wp_safe_redirect( $redirect_to );
                        exit;
                    }
                    $insert_id = hd_create_task( $fields );
                    if ( is_wp_error( $insert_id ) || $insert_id===false ) {
                        $redirect_to = add_query_arg( array( 'errors' =>  str_replace(' ' , '+','Error Store To Database') ), $page_url );
                    } else {
                        $page_url = admin_url( 'admin.php?page=hd-awg-list' );
                        $redirect_to = add_query_arg( array( 'messages' => str_replace(' ' , '+','اپلیکیشن با موفقیت ساخته شد - نیکی ساز') ), $page_url );
                    }
                    wp_safe_redirect( $redirect_to );
                    exit;
                }
                if (wp_verify_nonce($_POST['_wpnonce'], 'create_notification')) {
                    date_default_timezone_set('Asia/Tehran');
                    $package = isset( $_POST['api_key'] ) ? ( $_POST['api_key'] ) : '';
                    $type = isset( $_POST['type'] ) ? ( $_POST['type'] ) : '';
                    $title = isset( $_POST['title'] ) ? ( $_POST['title'] ) : '';
                    $body = isset( $_POST['body'] ) ? ( $_POST['body'] ) : '';
                    $type_value = isset( $_POST['type_value'] ) ? ( $_POST['type_value'] ) : '';
                    $small_image = isset( $_POST['small_image'] ) ? ( $_POST['small_image'] ) : '';
                    $large_image = isset( $_POST['large_image'] ) ? ( $_POST['large_image'] ) : '';
                    $date = date('Y-m-d H:i:s', time() + 10);
                    $fields = array(
                        'package' =>$package,
                        'type' => $type,
                        'title' =>$title,
                        'text' =>$body,
                        'type_value' =>$type_value,
                        'small_image' =>$small_image,
                        'large_image' =>$large_image,
                        'send_date_time' =>$date,
                        'user_id'=> (wp_get_current_user())->ID,
                    );
                    $page_url = admin_url('admin.php?page=hd-awg-create-notification');
                    $server_output=SendNotification($_POST['api_key'],$_POST['title'],$_POST['body'],$_POST['type'],isset($_POST['type_value'])?$_POST['type_value']:null,isset($_POST['small_image'])?$_POST['small_image']:null,isset($_POST['large_image'])?$_POST['large_image']:null);
                    if(isset(json_decode($server_output)->detail) && json_decode($server_output)->detail) {
                        hd_create_notification( $fields );
                        $message=__( json_decode($server_output)->detail, 'niki-saz' );
                        $redirect_to = add_query_arg(array('messages' => str_replace(' ', '+', $message)), $page_url);
                    }else{
                        $message=__( "error to send notification", 'niki-saz' );
                        $redirect_to = add_query_arg(array('errors' => str_replace(' ', '+', $message)), $page_url);
                    }
                    wp_safe_redirect($redirect_to);
                }
                if (wp_verify_nonce($_POST['_wpnonce'], 'awg_settings')) {
                    $arr=[];
                    $arr['najva_token']=$_POST['najva_token'];
                    $arr['custom_css']=$_POST['custom_css'];
                    $arr['custom_js']=$_POST['custom_js'];
                    update_option( "hd_awg_setting", $arr );
                    $page_url = admin_url('admin.php?page=hd-awg-settings');
                    if (file_exists(dirname(__FILE__)."/../custom.css")) {
                        $fh = fopen(dirname(__FILE__)."/../custom.css", 'w');
                        fwrite($fh,  $arr['custom_css']."\n");
                    } else {
                        $fh = fopen(dirname(__FILE__)."/../custom.css", 'w');
                        fwrite($fh,  $arr['custom_css']."\n");
                    }
                    if (file_exists(dirname(__FILE__)."/../custom.js")) {
                        $fh = fopen(dirname(__FILE__)."/../custom.js", 'w');
                        fwrite($fh,  $arr['custom_js']."\n");
                    } else {
                        $fh = fopen(dirname(__FILE__)."/../custom.js", 'w');
                        fwrite($fh,  $arr['custom_js']."\n");
                    }
                    $redirect_to = add_query_arg(array('messages' => str_replace(' ', '+', "تنظیمات با موفقیت ذخیره شد - نیکی ساز")), $page_url);
                    wp_safe_redirect($redirect_to);
                }
                if (wp_verify_nonce($_POST['_wpnonce'], 'awg_pwa')) {
                    $arr=[];
                    $arr['pwa_ios']=isset( $_POST['pwa_ios'] ) &&  ( $_POST['pwa_ios']=="on" ) ? 1 : 0;
                    $arr['pwa_loading'] = isset( $_POST['pwa_loading'] ) &&  ( $_POST['pwa_loading']=="on" ) ? 1 : 0;
                    $arr['button_text']=$_POST['button_text'];
                    $arr['button_background_color_value']=$_POST['button_background_color_value'];
                    $arr['button_text_color']=$_POST['button_text_color'];
                    $arr['button_text']=$_POST['button_text'];
                    $arr['popup_text']=$_POST['popup_text'];
                    $arr['popup_days']=$_POST['popup_days'];
                    $arr['app_name']=$_POST['app_name'];
                    $arr['app_name_fa']=$_POST['app_name_fa'];
                    $arr['app_icon']=$_POST['app_icon'];
                    update_option( "hd_awg_pw", $arr );
                    if($arr['pwa_loading']){
                        $message='{
                                "name": "'.$arr['app_name'].'",
                                "short_name": "'.$arr['app_name'].'",
                                "start_url": "'.get_site_url().'",
                                "display": "standalone",
                                "icons": [
                                {
                                    "src": "'.$arr['app_icon'].'",
                                    "sizes": "512x512",
                                    "type": "image/png"
                                }
                            ]
                            }';
                        $navigator="self.addEventListener('install', function(e) {
                                        e.waitUntil(
                                            cashes.open('sw-cache').then(function(cache) {
                                                return cache.addAll([
                                                      './',
                                                ])
                                            })
                                        )
                                    });
                                    self.addEventListener('fetch', function(e) {
                                        e.respondWith(
                                            caches.match(e.request).then(function(response) {
                                                return response || fetch(e.request)
                                            })
                                        )
                                    });";
                        if (file_exists(dirname(__FILE__)."/../options/manifest.json")) {
                            $fh = fopen(dirname(__FILE__)."/../options/manifest.json", 'w');
                            fwrite($fh, $message."\n");
                        } else {
                            $fh = fopen(dirname(__FILE__)."/../options/manifest.json", 'w');
                            fwrite($fh, $message."\n");
                        }
                        $content = " // Install event
                                    self.addEventListener('install', event => {
                                      console.log('Service Worker installed');
                                      self.skipWaiting();
                                    });
                                    // Activate event
                                    self.addEventListener('activate', event => {
                                      console.log('Service Worker activated');
                                      return self.clients.claim();
                                    });
                                    // Fetch event - DO NOT block anything
                                    self.addEventListener('fetch', event => {
                                      // Just let requests pass through
                                      event.respondWith(fetch(event.request).catch(() => {
                                        return new Response('Network error occurred', { status: 408 });
                                      }));
                                    });";
                        $fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/pwa-sw.js","wb");
                        fwrite($fp,$content);
                        fclose($fp);
                        fclose($fh);
                    }
                    $page_url = admin_url('admin.php?page=hd-awg-pwa');
                    $redirect_to = add_query_arg(array('messages' => str_replace(' ', '+', "تنظیمات PWA با موفقیت ذخیره شد - نیکی ساز")), $page_url);
                    wp_safe_redirect($redirect_to);
                }
                if (wp_verify_nonce($_POST['_wpnonce'], 'create_tab')) {
                    $id=isset( $_POST['id'] ) ? ( $_POST['id']) : null;
                    $tab=isset( $_POST['tabs'] ) ?  json_encode( $_POST['tabs']) : null;
                    $icon_active_color=$_POST['icon_active_color'];
                    $icon_deactive_color_value=$_POST['icon_deactive_color_value'];
                    $tab_back_color_value=$_POST['tab_back_color_value'];
                    $fields = array(
                        'id'=>$id,
                        'tabs' =>$tab,
                        'active_text_color' => $icon_active_color,
                        'deactive_text_color' =>$icon_deactive_color_value,
                        'background_color' =>$tab_back_color_value,
                    );
                    $page_url = admin_url('admin.php?page=hd-mobile-tabs');
                    $insert_id = hd_create_tabs( $fields );
                    if ( is_wp_error( $insert_id ) || $insert_id===false ) {
                        $redirect_to = add_query_arg( array( 'errors' =>  str_replace(' ' , '+','Error Store To Database') ), $page_url );
                    } else {
                        $page_url = admin_url( 'admin.php?page=hd-mobile-tabs' );
                        $redirect_to = add_query_arg( array( 'messages' => str_replace(' ' , '+','تب‌ها با موفقیت ذخیره شد - نیکی ساز') ), $page_url );
                    }
                    wp_safe_redirect($redirect_to);
                }
                if (wp_verify_nonce($_POST['_wpnonce'], 'create_intro')) {
                    $id=isset( $_POST['id'] ) ? ( $_POST['id']) : null;
                    $apps_bar=isset( $_POST['intro'] ) ?  json_encode( $_POST['intro']) : null;
                    $last_btn_txt=$_POST['btn_text'];
                    $last_btn_txt_color=$_POST['last_btn_text_color'];
                    $last_btn_color=$_POST['last_btn_color'];
                    $fields = array(
                        'id'=>$id,
                        'apps_bar' =>$apps_bar,
                        'last_btn_txt' => $last_btn_txt,
                        'last_btn_txt_color' =>$last_btn_txt_color,
                        'last_btn_color' =>$last_btn_color,
                    );
                    $page_url = admin_url('admin.php?page=hd-app-intro');
                    $insert_id = hd_create_intro( $fields );
                    if ( is_wp_error( $insert_id ) || $insert_id===false ) {
                        $redirect_to = add_query_arg( array( 'errors' =>  str_replace(' ' , '+','Error Store To Database') ), $page_url );
                    } else {
                        $redirect_to = add_query_arg( array( 'messages' => str_replace(' ' , '+','مقدمه اپلیکیشن با موفقیت ذخیره شد - نیکی ساز') ), $page_url );
                    }
                    wp_safe_redirect($redirect_to);
                }
            }
                }
        else{
            die(__('Are you cheating?', 'niki-saz'));
        }
    }
}
new webapp_generator_handler();