<?php
use \bitco\logic;


require_once ('db.php');
require_once ('../model/Task.php');
require_once ('../model/Response.php');
require_once ('../class/logic.php');



ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

//$page =  $_GET['page'];
//$limitPerPage = 20;
//$offset = ($page == 1 ? 0 : ($limitPerPage*($page-1)));

//$num = 200;

//echo $offset;
//exit();

try {


  $readDB = DB::connectReadDB();

} catch (PDOException $ex) {
  $response = new Response();
  $response->setSuccesss(false);
  $response->sethttpStatusCode(500);
  $response->addMessage("Database connection error");
  $response->addMessage($ex->getMessage());
  $response->send();
    exit();
}


function generateRandomString($length = 10) {
return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,$length);
}

if(!isset($_SERVER['HTTP_AUTHORIZATION'])  || strlen($_SERVER['HTTP_AUTHORIZATION'])  < 1 ){


    $response = new Response();
    $response->setSuccesss(false);
    $response->sethttpStatusCode(401);
    (!isset($_SERVER['HTTP_AUTHORIZATION']) ? $response->addMessage('Access Token is missing from the header') : false);
    (strlen($_SERVER['HTTP_AUTHORIZATION'])  < 1   ? $response->addMessage('Access token cannot be blank') : false);
    $response->send();
      exit();
}


 $accesstoken = $_SERVER['HTTP_AUTHORIZATION'];



    if ($accesstoken !== 'NDUzY2RlYzFhMWRhNTAU9xZDhhYzI0YTA5MTcTA3NTE2OA=='){
    $response = new Response();
    $response->setSuccesss(false);
    $response->sethttpStatusCode(400);
    $response->addMessage("Invalid Access Token");
    $response->send();
    exit();
  }





if (empty($_POST)){



    if  ($_SERVER['REQUEST_METHOD'] == 'POST'){

    try {

              $query = $readDB->prepare(" SELECT
  DISTINCT productCode short_desc,
  products.name 'description',
  ma.customerName AS 'location',
  products.name 'products_name',
  service_accounts.username 'sub_account',
  contracts.startDate AS 'start_date',
  contracts.endDate AS 'end_date',
  contracts.priceExcl 'charge',
  CASE
    WHEN contracts.endDate is null THEN 'Active'
    ELSE 'Expired'
  ENd 'Account_Status',
  service_instances.username 'service_tag',
  contracts.id 'identifier',
  contracts.masterAccountId
FROM
  contracts
  LEFT JOIN products ON contracts.productId = products.id
  LEFT JOIN master_accounts ma ON contracts.masterAccountId = ma.id
  LEFT JOIN people pe ON pe.masterAccountId = ma.id
  LEFT JOIN master_accounts ma3 ON ma.billingMasterAccountId = ma3.id
  LEFT JOIN service_accounts ON contracts.serviceAccountId = service_accounts.id
  LEFT JOIN service_instances ON service_accounts.id = service_instances.serviceAccountId
  left JOIN people p ON ma.primaryContact = p.id
  left join addresses ad on ad.masterAccountId = ma.id
where contracts.endDate is  null  ");

              $query->execute();

              $rowCount = $query->rowCount();

                $taskArray = [];
                  $rowCount = 0;
                while ($row = $query->fetch(PDO::FETCH_ASSOC)){



                    $systemId = 2; // O2CAP
                    $short_desc = is_null($row['short_desc'])  ? NULL : $row['short_desc'];
                    $description = is_null($row['description'])  ? NULL : $row['description'];
                    //$location = is_null($row['location'])  ? NULL : $row['location'];
                    $products_name = is_null($row['products_name'])  ? NULL : $row['products_name'];
                    $sub_account = is_null($row['sub_account'])  ? NULL : $row['sub_account'];
                    $start_date = is_null($row['start_date'])  ? NULL : $row['start_date'];
                    $end_date = is_null($row['end_date'])  ? NULL : $row['end_date'];
                    $charge = is_null($row['charge'])  ? NULL : $row['charge'];
                    $Account_Status = is_null($row['Account_Status'])  ? NULL : $row['Account_Status'];
                    $service_tag = is_null($row['service_tag'])  ? NULL : $row['service_tag'];
                    $identifier = is_null($row['identifier'])  ? NULL : $row['identifier'];
                    $masterAccountId = is_null($row['masterAccountId'])  ? NULL : $row['masterAccountId'];



                                        $obj = new logic();

                                        $loc = $obj->lookup_Location($masterAccountId,$systemId);
                                        //$sub = $obj->lookup_Sub_account($masterAccountId,$systemId,$sub_account);

                                        $service = $obj->lookup_Service_by_subaccount($sub_account,$systemId,$service_tag);
                                        $serviceid =  $service->id;

                                        $sub_accountid = NULL; //$sub->id;

                                        $locationid = $loc->id;
                                        $location = $loc->name;

                                        //$flag = $obj->check_contract($sub_account,$systemId);
                                        $flag = $obj->check_contract_new($sub_account,$systemId,$service_tag);
                                        $uniqid_key =  uniqid('la_') . generateRandomString(6);

                                        if ($flag == 0)
                                            {



                                            $obj->add_contract ($serviceid,$sub_accountid,$locationid,$uniqid_key,$systemId,$short_desc,$description,$location,$products_name,$sub_account,$start_date,$end_date,$charge,$Account_Status,$service_tag,$identifier,$masterAccountId);
                                                $rowCount =     $rowCount + 1;
                                            //$obj->update_unique_contract ($masterAccountId,$systemId);

                                            }else {

                                              //$obj->update_contract ($systemId,$sub_account,$end_date,$Account_Status,$masterAccountId);
                                            //  $rowCount = $rowCount + 1;
                                            }


                                    }




        $ob = new logic();
        $ob->update_contract_systemId_LA();
        $response = new Response();
        $response->setSuccesss(true);
        $response->sethttpStatusCode(200);
        $response->addMessage((string) $rowCount . " record inserted into central database.");
        $response->addMessage('O2CAP Solid : Action Successfully Completed');
        $response->send();
        exit();

    } catch (PDOException $ex) {
      $response = new Response();
      $response->setSuccesss(false);
      $response->sethttpStatusCode(500);
      $response->addMessage($ex->getMessage());
      $response->send();
      exit();
    }



    }


    else
        {
            $response = new Response();
            $response->setSuccesss(false);
            $response->sethttpStatusCode(404);
            $response->addMessage("Request method not allowed");
            $response->send();
        }

}else {
  // code...
  $response = new Response();
  $response->setSuccesss(false);
  $response->sethttpStatusCode(404);
  $response->addMessage("Endpoint not found");
  $response->send();

}
