<?php

namespace App\Console\Commands;

use App\Components\Functions;
use App\Models\MoneyDetail;
use App\Models\MoneyInfo;
use Carbon\Carbon;
use Illuminate\Console\Command;

class FixMoneyInfoQty extends Command {
	/**
	 * The name and signature of the console command.
	 *
	 * @var string
	 */
	protected $signature = 'fix:moneyinfo';

	/**
	 * The console command description.
	 *
	 * @var string
	 */
	protected $description = 'Command description';

	/**
	 * Create a new command instance.
	 *
	 * @return void
	 */
	public function __construct() {
		parent::__construct();
	}

	/**
	 * Execute the console command.
	 *
	 * @return mixed
	 */
	public function handle() {
		//
		$moneyDetails = MoneyDetail::query()->has( 'moneyInfo' )->has( 'room' )->has( 'hostel' )->with( 'moneyInfo' )->orderBy('id', 'desc')->get();
	//	$bar = $this->output->createProgressBar($moneyDetails->count());
		foreach ( $moneyDetails as $moneyDetail ) {
			//$bar->advance();
			$moneyInfo = $moneyDetail->moneyInfo;
			if ( ! in_array( $moneyInfo->type, [ MoneyInfo::VOUCHER_ROOM_PRICE, MoneyInfo::VOUCHER_CONTRACT ] ) ) {
				continue;
			}

			$qty = $moneyDetail->qty;

			if ( ! is_null( $qty ) ) {
				if ( is_numeric( $qty ) ) {
					$qty = $qty + 0;
					if ( ! is_int( $qty ) ) {
						$startDate = null;
						$endDate = null;
						if(!empty($moneyDetail->start_date)) {
							$startDate = Carbon::createFromFormat( 'Y-m-d', $moneyDetail->start_date );
						}
						if(!empty($moneyDetail->end_date)) {
							$endDate = Carbon::createFromFormat( 'Y-m-d', $moneyDetail->end_date );
						}
						$contract = $moneyInfo->contract;
						if($contract) {
							$dayCollect = $contract->day_collect;
							if(!empty($startDate) && !empty($endDate)) {
								if ( Functions::checkFullPeriod( $startDate->copy(), $endDate->copy(), $dayCollect ) ) {
									if(!empty($contract->collect_to))
									{
										$collectTo = Carbon::createFromFormat('Y-m-d', $contract->collect_to);
										if($collectTo->lessThan($startDate) || $collectTo->greaterThan($endDate))
										{
											$newQty = Functions::calculateDayInRange($startDate->copy(), $endDate->copy(), $dayCollect);
											dump($collectTo->toDateString());
											dump($startDate->copy()->toDateString());
											dump($endDate->copy()->toDateString());
											dump($dayCollect);
											dump($qty);
											dump($newQty);
											dump($moneyDetail->id, $moneyDetail->qty);

											dump('----');
										}
									}
								}
							}
						}
					}
				}
			}
		}
		//$bar->finish();
	}
}
