<?php

if(!defined('ABSPATH')){
	die('Hacking Attempt!');
}

// Cron for Calling Auto Backup
add_action('backuply_auto_backup_cron', 'backuply_auto_backup_execute');

// Auto Backup using custom cron
if(isset($_GET['action'])  && $_GET['action'] == 'backuply_custom_cron'){

	if(!backuply_verify_self(sanitize_text_field(wp_unslash($_REQUEST['backuply_key'])))){
		backuply_status_log('Security Check Failed', 'error');
		die();
	}
	
	backuply_auto_backup_execute();
}

// Adds a Wp-Cron for autobackup
if(!function_exists('backuply_add_auto_backup_schedule')){
function backuply_add_auto_backup_schedule($schedule = '') {
	global $backuply;

	if(empty($schedule)){
		$schedule = backuply_optpost('backuply_cron_schedule');
	}
	
	if (!wp_next_scheduled( 'backuply_auto_backup_cron' ) && !empty($backuply['bcloud_key'])){
		wp_schedule_event(time(), $schedule, 'backuply_auto_backup_cron');
	}
}
}

// Initiates auto backup
if(!function_exists('backuply_auto_backup_execute')){
function backuply_auto_backup_execute(){
	global $backuply;

	if(empty($backuply['bcloud_key'])){
		return false;
	}

	$access_key = backuply_bcloud_isallowed();

	if(empty($access_key)){
		return;
	}

	//$backuply['auto_backup'] = true;
	backuply_create_log_file();

	if($auto_backup_settings = get_option('backuply_cron_settings')){
		$auto_backup_settings['auto_backup'] = true;
		update_option('backuply_status', $auto_backup_settings);
		backuply_backup_execute();
	}
}
}

// Rotate the backups
if(!function_exists('backuply_backup_rotation')){
function backuply_backup_rotation() {
	global $backuply;

	if(empty($backuply['status']['backup_rotation'])) {
		return;
	}

	$backup_info = backuply_get_backups_info();

	if(empty($backup_info)) {
		return;
	}

	$backup_info = array_filter($backup_info, 'backuply_bcloud_filter_backups_on_loc');
	usort($backup_info, 'backuply_bcloud_oldest_backup');

	if(count($backup_info) >= $backuply['status']['backup_rotation']) {
		if(empty($backup_info[0])) {
			return;
		}

		backuply_log('Deleting Files because of Backup rotation');
		backuply_status_log('Deleting backup because of Backup rotation', 39);

		$extra_backups = count($backup_info) - $backuply['status']['backup_rotation'];
		
		if($extra_backups > 0) {
			for($i = 0; $i < $extra_backups; $i++) {
				backuply_delete_backup($backup_info[$i]->name .'.'. $backup_info[$i]->ext);
			}
		}
	}
}
}

function backuply_bcloud_oldest_backup($a, $b) {
	return (int) $a->btime - (int) $b->btime;
}

// Returns backups based on location
function backuply_bcloud_filter_backups_on_loc($backup) {
	global $backuply;

	if(!isset($backup->backup_location)){
		return ($backup->auto_backup);
	}

	return ($backuply['status']['backup_location'] == $backup->backup_location && $backup->auto_backup);
}

function backuply_bcloud_isallowed(){
	global $backuply;

	if(!empty(get_transient('bcloud_data'))){
		return true;
	}

	$url = BACKUPLY_API . '/cloud/token.php';
	
	// Check if License is present and active.
	if(empty($backuply['license']['license'] || empty($backuply['license']['active']))){
		return false;
	}
	
	// Check if Bcloud key is there.
	if(empty($backuply['bcloud_key'])){
		return false;
	}

	$args = array(
		'sslverfiy' => false,
		'body' => array(
			'license' => $backuply['license']['license'],
			'bcloud_key' => $backuply['bcloud_key'],
			'url' => site_url()
		),
		'timeout' => 30
	);

	$res = wp_remote_post($url, $args);
	
	if(empty($res) && is_wp_error($res)){
		return false;
	}
	
	if(empty($res['body'])){
		return false;
	}
	
	$body = json_decode($res['body'], true);
	
	if(empty($body['success'])){
		return false;
	}
	
	return true;
}