<?php

namespace TablePress\PhpOffice\PhpSpreadsheet\Calculation\Statistical;

use TablePress\PhpOffice\PhpSpreadsheet\Calculation\Functions;

abstract class AggregateBase
{
	/**
				 * MS Excel does not count Booleans if passed as cell values, but they are counted if passed as literals.
				 * OpenOffice Calc always counts Booleans.
				 * Gnumeric never counts Booleans.
				 * @param mixed $arg
				 * @param mixed $k
				 * @return mixed
				 */
				protected static function testAcceptedBoolean($arg, $k)
	{
		if (!is_bool($arg)) {
			return $arg;
		}
		if (Functions::getCompatibilityMode() === Functions::COMPATIBILITY_GNUMERIC) {
			return $arg;
		}
		if (Functions::getCompatibilityMode() === Functions::COMPATIBILITY_OPENOFFICE) {
			return (int) $arg;
		}
		if (!Functions::isCellValue($k)) {
			return (int) $arg;
		}
		/*if (
			(is_bool($arg)) &&
			((!Functions::isCellValue($k) && (Functions::getCompatibilityMode() === Functions::COMPATIBILITY_EXCEL)) ||
				(Functions::getCompatibilityMode() === Functions::COMPATIBILITY_OPENOFFICE))
		) {
			$arg = (int) $arg;
		}*/

		return $arg;
	}

	/**
				 * @param mixed $arg
				 * @param mixed $k
				 */
				protected static function isAcceptedCountable($arg, $k, bool $countNull = false): bool
	{
		if ($countNull && $arg === null && !Functions::isCellValue($k) && Functions::getCompatibilityMode() !== Functions::COMPATIBILITY_GNUMERIC) {
			return true;
		}
		if (!is_numeric($arg)) {
			return false;
		}
		if (!is_string($arg)) {
			return true;
		}
		if (!Functions::isCellValue($k) && Functions::getCompatibilityMode() === Functions::COMPATIBILITY_OPENOFFICE) {
			return true;
		}
		if (!Functions::isCellValue($k) && Functions::getCompatibilityMode() !== Functions::COMPATIBILITY_GNUMERIC) {
			return true;
		}

		return false;
	}
}
