<?php

namespace App\Http\Controllers;

use DateTime;

class IssueValidationController extends Controller
{
    public function __construct()
    {}

    function date_to_datetime(string $date)
    {
        $date = str_replace('/', '-', $date);
        $datetime = new DateTime($date);

        return $datetime->format('Y-m-d H:i:s');
    }

    function search_requested_by($issue_labels){
        foreach ($issue_labels as $key => $label) {
            if (strpos($label['name'],'RequestBy') !== false) {
             return true;
            }
        }
        return false;
    }

    function get_issue_total_time(array $issue_time)
    {
        $count = 0;
        foreach ($issue_time as $time) {
            $count += (int) $time['time'];
        }

        return $count;
    }

    function check_issue_is_billed(array $issue_labels, array $issue_time): bool {
        $issue_time = $this->get_issue_total_time($issue_time);
        $issue_time = (gmdate('H:i:s', $issue_time) !== '00:00:00');
        $label_requested_by_index = $this->search_requested_by($issue_labels);
        return $issue_time && $label_requested_by_index;
    }

    function handle_single_issue(string $from_date, string $to_date, array $issue, array $issue_time){
        $from_datetime = $this->date_to_datetime($from_date);
        $to_datetime = $this->date_to_datetime($to_date);
        $closed_after_inital_date = substr($issue['closed_at'], 0, 19) > $from_datetime;
        $closed_after_ending_date = substr($issue['closed_at'], 0, 19) <= $to_datetime;
        $issue_is_billed = false;
        if(isset($issue['labels']) && sizeof($issue['labels']) > 0) {
            $issue_is_billed = $this->check_issue_is_billed($issue['labels'], $issue_time);
        }
        return $closed_after_inital_date && $closed_after_ending_date && $issue_is_billed;
    }
}