<?php

namespace App\Http\Controllers\Network;

use App\Http\Controllers\Network\Classes\HO;
use Illuminate\Support\Str;
use Yajny\EventsYj\Events\SaleNew;
use Yajny\EventsYj\Events\SaleUpdated;
use Yajny\Member\Models\Network;
use Yajny\Member\Models\Sale;
use Yajny\Models\Store;
use Yajny\Models\StoreCashback;

class HasOffer extends BaseNetwork
{
    public function __construct(Network $network)
    {
        parent::__construct($network, new HO($network->api_key, $network->short_name));
    }

    function mapNetworkSaleToYajnySale($saleOrder): ?Sale
    {
        $hoSale = $saleOrder['Stat'];

        $sale = Sale::withoutGlobalScopes()->firstOrNew(['network_id' => $this->network->id, 'network_transaction_id' => $hoSale['id'] ]);

        if (!$sale->exists) {
            $sale->order_id = $hoSale['id'];
            $sale->click_id = $hoSale['affiliate_info1'];
            $sale->transaction_time = date('Y-m-d H:i:s',strtotime($hoSale['datetime']));
            $sale->currency = 'USD';
        }
        $sale->local_order_amount = $hoSale['sale_amount'];
        $sale->local_comission = $hoSale['payout'];
        $sale->network_status = $hoSale['conversion_status'];
        $sale->setStatus($this->network->sale_statuses);
        return $sale;
    }

    public function getStores($network)
    {
        $ho = new HO($network->api_key, $network->short_name);
        $ho->getStores();

        foreach ($ho->stores as $hoStore) {

            $hoStore = $hoStore['Offer'];
            $store = Store::withoutGlobalScopes()->firstOrNew(['creation_mode' => $network->short_name, 'network_store_id' =>  $hoStore['id']]);

            if ($store->exists) {
                // update

                $pay_type = ($hoStore['payout_type']  == 'cpa_flat') ? 'fixed' : 'percent';
                $pay_val = ($hoStore['payout_type']  == 'cpa_flat') ? $hoStore['default_payout'] : $hoStore['percent_payout'];

                $storecb  = StoreCashback::updateOrCreate(['store_id' => $store->id, 'network_refid' => $store->id], ['rate_type' => $pay_type, 'rate_amount' => $pay_val + 0]);
                if (!$storecb->exists) {
                    foreach (explode(',', config('website.cnf_langs')) as $lang)
                        $storecb->setTranslation('title', $lang, 'Default Sale');
                }
                $storecb->save();
            } else {
                foreach (explode(',', config('website.cnf_langs')) as $lang)
                    $store->setTranslation('name', $lang, $hoStore['name']);

                $store->slug = Str::slug($hoStore['name'] . '-' . $hoStore['id']);
                $store->homepage = $hoStore['preview_url'];
                $store->status = 'draft';
                $store->network_id = $network->id;
                $store->save();

                $pay_type = ($hoStore['payout_type']  == 'cpa_flat') ? 'fixed' : 'percent';
                $pay_val = ($hoStore['payout_type']  == 'cpa_flat') ? $hoStore['default_payout'] : $hoStore['percent_payout'];

                $storecb = new StoreCashback(['rate_type' => $pay_type, 'rate_amount' => $pay_val + 0, 'network_refid' => $hoStore['id']]);
                foreach (explode(',', config('website.cnf_langs')) as $lang)
                    $storecb->setTranslation('title', $lang, 'Default Sale');

                $store->store_cashback()->save($storecb);
            }
        }
    }

    public function getCoupons($network)
    {

    }
}
