<?php

include 'vendor/autoload.php';
/**
 * To create Child Accounts you need a PrintNode Integrator Account. 
 * You then need to authenticate with your API Key.
 **/
$credentials = new PrintNode\Credentials();
$credentials->setApiKey(PRINTNODE_APIKEY);
$request = new PrintNode\Request($credentials);
// Initialise a Child Account
$account = new PrintNode\Account();
// Set properties on the Child Account
$account->Account = array("firstname" => "A", "lastname" => "ALastName", "password" => "superStrongPassword", "email" => "*****@*****.**");
// Post the Child Account to the API
$aNewAccount = $request->post($account);
// You can get the Child Account ID from the response object
$id = $aNewAccount->GetDecodedContent()["Account"]["id"];
// on the method called. You can iterate over this array however you please, for example
// you might use a while or foreach loop.
// Step 4: Send a PrintJob to Printnode.
// PrintNode currently only accepts PDF documents.
// To print something, you need to create a new instance of PrintNode\PrintJob:
$printJob = new PrintNode\PrintJob();
// You can then populate this object with the information about the print-job
// and add the base64-encoded content of, or the URI to your PDF. To do this use the properties
// as defined on the object.
//
// In this example, we're going to print a a base64-encoded PDF named invoice.pdf:
$printJob->printer = $printers[1];
$printJob->contentType = 'pdf_base64';
$printJob->content = base64_encode(file_get_contents('a4_portrait.pdf'));
$printJob->source = 'My App/1.0';
$printJob->title = 'Test PrintJob from My App/1.0';
// Hint: The PrintNode PHP API comes complete with PHPDoc comments.
// If you have an editor that supports PHPDoc code completion, you should see hints
// for the properties and method names on each of the objects.
// Once you have populated the object, all that's left to do is submit it:
$response = $request->post($printJob);
// The response returned from the post method is an instance of PrintNode\Response.
// It contains methods for retrieving the response headers, body and HTTP status-code and message.
// Returns the HTTP status code.
$statusCode = $response->getStatusCode();
// Returns the HTTP status message.
$statusMessage = $response->getStatusMessage();
// Returns an array of HTTP headers.
$headers = $response->getHeaders();
// Return the response body.
$content = $response->getContent();
 /**
  * @depends testAccountCreationAndDeletion
  * */
 public function testApiKey()
 {
     $request = new PrintNode\Request($this->credentials);
     $response = $request->post($this->account);
     $request->setChildAccountById($response->GetDecodedContent()["Account"]["id"]);
     $ApiKey = new PrintNode\ApiKey();
     $ApiKey->description = "testing";
     $response = $request->post($ApiKey);
     $this->assertInternalType("string", $response->GetDecodedContent());
     $getKey = $request->getApiKeys("testing");
     $this->assertEquals($response->GetDecodedContent(), $getKey);
     $request->DeleteAccount();
 }
 /**
  * @depends testPrintJobs
  *
  * */
 public function testPrintJobsPost()
 {
     $request = new PrintNode\Request($this->credentials);
     $printers = $request->getPrinters();
     $printJob = new PrintNode\PrintJob();
     $printJob->printer = $printers[0];
     $printJob->contentType = 'pdf_base64';
     $printJob->content = base64_encode(file_get_contents('a4_portrait.pdf'));
     $printJob->source = 'testing print';
     $printJob->title = 'Test Printjob for PHP API Tests';
     $response = $request->post($printJob);
     $this->assertInternalType('int', $response->GetDecodedContent());
 }