<?php
/*
 * Copyright (c) 2021 LatePoint LLC. All rights reserved.
 */

namespace LatePoint\Misc;

class WorkPeriod {
	public ?string $custom_date = null;
	public int $week_day;
	public int $start_time  = 0;
	public int $end_time    = 0;
	public int $service_id  = 0;
	public int $agent_id    = 0;
	public int $location_id = 0;
	public int $weight      = 0;

	function calculate_weight(): int {
		if ( $this->service_id ) {
			$this->weight++;
		}
		if ( $this->agent_id ) {
			$this->weight++;
		}
		if ( $this->location_id ) {
			$this->weight++;
		}
		if ( $this->custom_date ) {
			$this->weight = $this->weight + 3;
		}
		return $this->weight;
	}

	function __construct( $args = [] ) {
		$allowed_props = self::allowed_props();
		foreach ( $args as $key => $arg ) {
			if ( in_array( $key, $allowed_props ) ) {
				$this->$key = $arg;
			}
		}
		$this->calculate_weight();
	}

	public static function create_from_work_period_model( \OsWorkPeriodModel $work_period ): WorkPeriod {
		return new WorkPeriod(
			[
				'custom_date' => $work_period->custom_date,
				'week_day'    => $work_period->week_day,
				'start_time'  => $work_period->start_time,
				'end_time'    => $work_period->end_time,
				'agent_id'    => $work_period->agent_id,
				'location_id' => $work_period->location_id,
				'service_id'  => $work_period->service_id,
			]
		);
	}

	public static function allowed_props(): array {
		return [
			'custom_date',
			'week_day',
			'start_time',
			'end_time',
			'agent_id',
			'location_id',
			'service_id',
		];
	}
}
