<?php

namespace Tests\Http\Controllers\CsvController\CsvCostCalc;

use App\Http\Controllers\CsvController\CsvCostCalc\CsvMinuteCostCalc;
use Tests\TestCase;

class CsvMinuteCostCalcTest extends TestCase
{

    protected $CsvMinuteCostCalc;

    protected function setUp(): void
    {
        parent::setUp();
        $this->csv_minute_cost_calc = new CsvMinuteCostCalc(); // Replace CsvMinuteCostCalc with the actual class name
        $this->csv_minute_cost_calc->partner_organization = 'PartnerOrg'; // Set up the partner organization
        $this->csv_minute_cost_calc->price_partner = [
            'high' => 100,
            'normal' => 50,
            'low' => 25,
            '0' => 0
        ];
        $this->csv_minute_cost_calc->price_client = [
            'high' => 200,
            'normal' => 100,
            'low' => 50,
            '0' => 0
        ];
    }

    public function testSelectCorrectCostForPartnerHighPriority()
    {
        $result = $this->csv_minute_cost_calc->select_correct_cost('RequestedBy/PartnerOrg', 'Priority/critical');
        $this->assertEquals(100, $result);
    }

    public function testSelectCorrectCostForPartnerMediumPriority()
    {
        $result = $this->csv_minute_cost_calc->select_correct_cost('RequestedBy/PartnerOrg', 'Priority/medium');
        $this->assertEquals(50, $result);
    }

    public function testSelectCorrectCostForClientHighPriority()
    {
        $result = $this->csv_minute_cost_calc->select_correct_cost('RequestedBy/Client', 'Priority/critical');
        $this->assertEquals(200, $result);
    }

    public function testSelectCorrectCostForClientLowPriority()
    {
        $result = $this->csv_minute_cost_calc->select_correct_cost('RequestedBy/Client', 'Priority/low');
        $this->assertEquals(50, $result);
    }

    public function testSelectCorrectCostWithUnknownPriority()
    {
        $result = $this->csv_minute_cost_calc->select_correct_cost('RequestedBy/Client', 'Priority/unknown');
        $this->assertEquals(0, $result);
    }

    public function testSelectCorrectCostForPartnerLowPriority()
    {
        $result = $this->csv_minute_cost_calc->select_correct_cost('RequestedBy/PartnerOrg', 'Priority/low');
        $this->assertEquals(25, $result);
    }

    public function testSelectCorrectCostWithExceptionHandling()
    {
        $result = $this->csv_minute_cost_calc->select_correct_cost('', '');
        $this->assertEquals(0, $result); // Assuming default is 0
    }
}