<?php

namespace App\Http\Controllers\Network\Classes;

use Carbon\Carbon;
use Exception;
use GuzzleHttp\Client;

class Partnerize implements SalesGetterApi
{
    public $client;
    public $sales;
    public $publisherId;
    public $apiKey;
    public $privateKey;

    public function __construct($publisherId, $apiKey, $privateKey)
    {
        $this->publisherId = $publisherId;
        $this->apiKey = $apiKey;
        $this->privateKey = $privateKey;
        $this->client = new Client();
        $this->sales = [];
    }

    public function getSales($start_days, $end_days, $offset = 0)
    {
        $url = "https://api.performancehorizon.com/reporting/report_publisher/publisher/{$this->publisherId}/conversion.json";
        $startDate = Carbon::today()->subDays($start_days)->toDateString();
        $endDate = Carbon::tomorrow()->subDays($end_days)->toDateString();
        $query = [
            'start_date' => $startDate,
            'end_date' => $endDate,
            'offset' => $offset,
            'limit' => 100
        ];

        try {
            $response = $this->client->get(
                $url,
                [
                    'query' => $query,
                    'auth' => [
                        $this->apiKey,
                        $this->privateKey
                    ]
                ]
            );

            $salesResponse = json_decode($response->getBody());
            if (!$salesResponse) return [];

            $this->sales = array_merge($this->sales, $salesResponse->conversions);

            if ($salesResponse->count > $salesResponse->limit + $salesResponse->offset) {
                $offset = $salesResponse->offset + $salesResponse->limit;
                $this->getSales($start_days, $end_days, $offset);
            }

            return $this->sales;
        } catch (Exception $e) {
            return [];
        }
    }
}
