<?php
require_once "/opt/phpcurl/vendor/autoload.php";
use Curl\Curl;


$time1 = microtime(true);
require_once '/home/mathia/wordpress_monmathia/wp-load.php';
$time2 = microtime(true);

error_log("AvosKids wpload : " . ($time2 - $time1));
global $env_prod;
global $api_prod;
global $api_test;
global $api_token;

$env_prod = true; 
$api_test = "https://joy-api-dev.adlpartner.com";
$api_prod = "https://joy-api.adlpartner.com";


function avoskids_invert_date($date)
{
    if (strpos($date, "-") > - 1) {
        $tmp = explode("-", $date);
        return $tmp[2] . "/" . $tmp[1] . "/" . $tmp[0];
    } else {
        $tmp = explode("/", $date);
        return $tmp[2] . "-" . $tmp[1] . "-" . $tmp[0];
    }
}

function avoskids_apiurl(){
    global $env_prod;
    global $api_prod;
    global $api_test;
    
    return $env_prod?$api_prod:$api_test;
}

function avoskids_get_accesstoken()
{
	global $env_prod;
    $time1 = microtime(true);
    
//     $command = 'curl -X POST -H "Content-Type: application/json" '.
//         '-d \'{"username":"08101193", "password": "YyNm1SBhBoQX"}\' \''. avoskids_apiurl() . '/api/auth'. '\'';
    
//     print($command);
//     $output = array();
//     exec($command, $output);
    
//     //read response
//     $json_result = '';
//     foreach ($output as $line){
//         $json_result.=$line;
//     }
//     $result = json_decode($json_result);
        
    $curl = new Curl();
    //{ "password": "YyNm1SBhBoQX" , "username": "08101193"}
    
    $curl->post(avoskids_apiurl() . "/api/auth", json_encode($env_prod ? 
	    array("username"=>"08001007", "password"=>"BkD8SSYBzSer"): 
	    array("username"=>"08101193", "password"=>"YyNm1SBhBoQX")
    ));
    $curl->close();
    if ($curl->error) {
        throw new Exception($curl->errorCode . ': ' . $curl->errorMessage);
    }
    if (empty($curl->response->token)) {
        throw new Exception(print_r($curl->response, true));
    }

    global $api_token;
    $api_token = $curl->response->token;
    //$api_token = $result->token;
    
    $time2 = microtime(true);
    error_log("AvosKids accesstoken : " . ($time2 - $time1));
    
    return $api_token;
}

function avoskids_get_events($eventid = null, $status = null)
{
    $time1 = microtime(true);
    global $api_token;
    
    $curl = new Curl();
    //     $api_token = "c2FtdWVsQHByb2ZlbnBvY2hlLmNvbTptYXRoaWEyMDIwIQ==";
    $curl->setHeader('Content-Type', "application/json");
    $curl->setHeader('Authorization', "Bearer $api_token");
    
    if(!$eventid && !$status){        
        $curl->get(avoskids_apiurl() . "/api/events");
    } else if ($eventid){
        $curl->get(avoskids_apiurl() . "/api/events/$eventid");
    } else {
        $curl->get(avoskids_apiurl() . "/api/events?status=$status");
    }
    $curl->close();
    if ($curl->error) {
        throw new Exception($curl->errorCode . ': ' . $curl->errorMessage);
    }
    
    $time2 = microtime(true);
    error_log("AvosKids get_events $eventid $status : " . ($time2 - $time1));
    
    return $curl->response;
}

function avoskids_update_events($eventid, $json)
{
    $time1 = microtime(true);
    global $api_token;
    
    $curl = new Curl();
    $curl->setHeader('Content-Type', "application/json");
    $curl->setHeader('Authorization', "Bearer $api_token");
    
    $curl->post(avoskids_apiurl() . "/api/events/$eventid", $json);
    
    $curl->close();
    if ($curl->error) {
        throw new Exception($curl->errorCode . ': ' . $curl->errorMessage);
    }
    
    $time2 = microtime(true);
    error_log("AvosKids update events $eventid : " . ($time2 - $time1));
    error_log("event : " . $json);
    
    return $curl->response;
}

function avoskids_create_user($email, $userdata){
    // create WP user
    $time1 = microtime(true);
    $user = get_user_by('email', $email);
    if(!$user){
        $userdata = array(
            'user_login' => $email,
            'user_pass' => $userdata->password,
            'user_email' => $email,
            'role' => 'a_vos_kids',
            'first_name' => $userdata->first_name,
            'last_name' => $userdata->last_name
        );
        $wp_user_id = wp_insert_user($userdata);
        $user = new WP_User($wp_user_id);
        $time2 = microtime(true);
        error_log("AvosKids create user : " . ($time2 - $time1));
        
        // create LMS account
        trala_create_account($user);
        
        $time3 = microtime(true);
        error_log("AvosKids create user LMS: " . ($time3 - $time2));
        if(!is_wp_error($user)){
            update_user_meta($user->ID, 'maxuser', $userdata->maxuser);// TODO update base on product
            update_user_meta($user->ID, 'migration_bubble', false);
            update_user_meta($user->ID, 'subscriptionid', 4);
        }
        return true;
    } else {
        return false;
    }
}

function avoskids_manage_event($event){
    error_log(print_r($event, true));
    if($event->status == "NEW"){
        switch($event->eventType){
            case "INS":
                $email = $event->order->sender->email;
                $userdata = new stdClass();
                $userdata->first_name = $event->order->sender->firstname;
                $userdata->last_name = $event->order->sender->lastname;
                $userdata->password = wp_generate_password();
                
                switch($event->item->offerCode){
                    case "39264":
                        $userdata->maxuser = 1;
                        break;
                    default:
                        $userdata->maxuser = 2;
                }
                $sendUpdate = avoskids_create_user($email, $userdata);
                if($sendUpdate){
                    $update_event = '{
                        "eventType":"'.$event->eventType.'",
                        "company": '.$event->company.',
                        "status":"DONE",
                        "updateDate":"'.date('Y-m-d').'",
                        "errorCode":"",
                        "errorLabel":"",
                        "INS": {
                            "url":"https://mon.mathia.education/",
                            "temporaryLogin":"'.$email.'",
                            "temporaryPassword":"'.$userdata->password.'"
                        }
                    }';
                    avoskids_update_events($event->eventId, $update_event);
                }
                break;
            case "ANN":
                $email = $event->order->sender->email;
                $user = get_user_by_email($email);
                update_user_meta($user->ID, 'subscriptionid', 2);
                update_user_meta($user->ID, 'date_expiration', avoskids_invert_date($event->effectiveDate));
                $update_event = '{
                    "eventType":"'.$event->eventType.'",
                    "company": '.$event->company.',
                    "status":"DONE",
                    "updateDate":"'.date('Y-m-d').'",
                    "errorCode":"",
                    "errorLabel":""
                }';
                avoskids_update_events($event->eventId, $update_event);
                break;
        }
    }
}

avoskids_get_accesstoken();
$obj = json_decode(file_get_contents('php://input'));
error_log("php://input ".print_r($true));
if(!empty($obj)){
    avoskids_manage_event($obj);
} else {

    $events = avoskids_get_events();

    if(isset($_GET['action']) && $_GET['action'] == 'print_events'){
	// echo '<pre>'; print_r($events);echo '</pre>';
    } else {

    foreach ($events as $event){
        avoskids_manage_event($event);
    }
    }
}

http_response_code(200);
exit();

?>
