<?php

namespace App\Http\Controllers\Network\Classes;

use Exception;
use GuzzleHttp\Client;

class AWIN implements SalesGetterApi
{

    public $api_key;
    public $api_url;
    public $sales;

    public function __construct($api_key, $affiliate_id, $api_url)
    {
        $this->api_url = str_replace('@affiliate_id@', $affiliate_id, $api_url);
        $this->api_key = $api_key;
        $this->sales = [];
    }

    /**
     * Getting sales from network and prepare it to be ready for saving.
     *
     * @param DateTime $start_days filter sales based on start days
     * @param DateTime $end_days filter sales based on end days
     *
     * @return array sales orders
     * @throws Exception If issue happened on saving sales
     *
     */
    public function getSales($start_days, $end_days)
    {
        try {
            $salesResponse = (new Client())->get(
                $this->api_url,
                [
                    'query' => ['timezone' => 'UTC', 'dateType' => 'transaction',
                        'startDate' => date('Y-m-d\T00:00:00', strtotime("today - {$start_days} days ")),
                        'endDate' => date('Y-m-d\T23:59:59', strtotime("today - {$end_days} days "))
                    ],
                    'headers' => ['Authorization' => 'Bearer ' . $this->api_key]
                ]
            );

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

            $this->sales = $sales;
            return $sales;

        } catch (Exception $e) {
            return [];
        }
    }
}
