<?php

namespace App\Services\Navision;

use App\Models\Catalog;
use App\Models\Company;
use App\Models\LicenseExtension;
use App\Support\NavClient;

/**
 * Navision API service class for licenses
 */
class LicensesService {
    protected $client;

    public function __construct()
    {
        $this->client = new NavClient();
    }

    /**
     * Gets a given company's extensible licenses from NAV
     *
     * @param Company $company
     * @return Object - License Data
     */
    public function getCompanyLicenses(Company $company) {
        $filters = [
            'Related_Company_Number' => $company->nav_no,
            'Show_in_WebShop' => 'true'
        ];

        $licenses = $this->client->getLicenses($filters, 100);

        // calculates extension prices
        foreach ($licenses as $license) {
            if (empty($license->Contact_Sales)) {
                $license->extensions = $this->calcLicenseExtensions($license, $company->discount_group);
            } else {
                $license->extensions = [];
            }
        }

        return $licenses;
    }

    /**
     * Applies Customer type Discount to license extensions values
     *
     * @param object $license
     * @param string $customerDiscountGroup
     * @return array calculated extensions
     */
    public function calcLicenseExtensions(object $license, $customerDiscountGroup = 'COM')
    {
        $catalog = Catalog::where('customer_discount_group', $customerDiscountGroup == 'COM' ? '*' : $customerDiscountGroup)
            ->where('item_discount_group', 'SW')
            ->first();

        $percentage = $license->Extension_Percentage;
        $baseValue = $license->Total_License_Value;

        if ($catalog && $catalog->discount) {
            $baseValue = (1 - $catalog->discount / 100) * $baseValue;
        }

        $extensions = LicenseExtension::get();
        $calulatedExtensions = [];

        foreach ($extensions as $extension) {
            $calulatedExtensions[$extension->duration] = [
                'duration' => $extension->duration,
                'sku' => $extension->nav_item_no,
                'price' => round($extension->duration * $percentage * $baseValue / 100, 2)
            ];
        }

        return $calulatedExtensions;
    }
}
