<?php

namespace App\Http\Controllers\CsvController\CsvCostCalc;

use Exception;
use Illuminate\Support\Facades\Log;
use App\Utils\utils;

class CsvMinuteCostCalc
{
    public function __construct()
    {
        $this->internal_percentage_to_deduct = config('app.price_internal_percentage_to_deduct');
        $this->partner_organization = strtolower(config('app.gitea_partner_organization'));
        $this->price_partner = [
            'high' => $this->calculate_minute_cost((int)config('app.price_partner_high')),
            'normal' => $this->calculate_minute_cost((int)config('app.price_partner_normal')),
            'low' => $this->calculate_minute_cost((int)config('app.price_partner_low')),
            '0'=>0,
        ];
        $this->price_client = [
            'high' => $this->calculate_minute_cost((int)config('app.price_client_high')),
            'normal' => $this->calculate_minute_cost((int)config('app.price_client_normal')),
            'low' => $this->calculate_minute_cost((int)config('app.price_client_low')),
            '0'=>0,
        ];
    }

    private function calculate_minute_cost(int $hourly_cost)
    {
        return $hourly_cost / 60;
    }

    private function extract_string_from_label($label)
    {
        return strtolower(substr($label, strpos($label, '/') + 1));
    }

    function
    select_correct_cost($requested_by, $priority)
    {
        $requested_by = $this->extract_string_from_label($requested_by);
        $priority = $this->extract_string_from_label($priority);

        $requested_by_partner = str_contains($requested_by, strtolower($this->partner_organization));
        try {
            $priority = match ($priority) {
                'critical', 'high' => 'high',
                'medium' => 'normal',
                'low' => 'low',
                default =>'0'
            };
        } catch (Exception $e) {
            Log::error('E-CSV-MINUTECOSTCALC - '. $e->getMessage());
        }
        if ($requested_by_partner) {
            return $this->price_partner[$priority];
        }
        return $this->price_client[$priority];
    }
}