<?php
/*
** Copyright (C) 2001-2025 Zabbix SIA
**
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
**
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
**
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
**/


require_once __DIR__.'/../include/CAPITest.php';
require_once __DIR__.'/../../include/classes/helpers/CArrayHelper.php';

/**
 * @backup hosts, hstgrp
 */
class testHostImport extends CAPITest {

	public function testDiscoveredHostGroupsAfterImportParentHost() {
		$source = file_get_contents(__DIR__.'/xml/testDiscoveredHostGroupsAfterImportParentHost.xml');

		$rules = [
			'host_groups' => [
				'createMissing' => true
			],
			'hosts' => [
				'updateExisting' => true,
				'createMissing' => true
			],
			'items' => [
				'updateExisting' => true,
				'createMissing' => true
			],
			'discoveryRules' => [
				'updateExisting' => true,
				'createMissing' => true
			]
		];

		$this->call('configuration.import', [
			'format' => 'xml',
			'source' => $source,
			'rules' => $rules
		], null);

		$this->assertEquals(2, CDBHelper::getCount(
			'SELECT NULL'.
			' FROM hstgrp'.
			' WHERE name IN (\'Master group\', \'12345\')'
		));

		$this->assertEquals(2, CDBHelper::getCount(
			'SELECT NULL'.
			' FROM hosts'.
			' WHERE host IN (\'Host having discovered hosts\', \'12345\')'
		));
	}

	public function testHostWithConditionalDefaults() {
		$source = file_get_contents(__DIR__.'/xml/testHostWithConditionalDefaults.xml');

		$rules = [
			'host_groups' => [
				'createMissing' => true
			],
			'hosts' => [
				'updateExisting' => true,
				'createMissing' => true
			],
			'items' => [
				'updateExisting' => true,
				'createMissing' => true
			],
			'discoveryRules' => [
				'updateExisting' => true,
				'createMissing' => true
			]
		];

		$this->call('configuration.import', [
			'format' => 'xml',
			'source' => $source,
			'rules' => $rules
		], null);

		$hosts = $this->call('host.get', [
			'output' => ['host'],
			'selectItems' => ['type', 'key_', 'value_type'],
			'filter' => [
				'host' => 'Host for testing defaults on conditional fields'
			]
		]);
		$this->assertArrayHasKey('result', $hosts);
		$host = $hosts['result'][0];
		unset($host['hostid']);

		$this->assertArrayHasKey('items', $host);
		CArrayHelper::sort($host['items'], ['key_']);
		$host['items'] = array_values($host['items']);

		$this->assertEquals($host, [
			'host' => 'Host for testing defaults on conditional fields',
			'items' => [
				[
					'type' => '18',
					'key_' => 'binary',
					'value_type' => '5'
				],
				[
					'type' => '22',
					'key_' => 'browser-item',
					'value_type' => '3'
				],
				[
					'type' => '0',
					'key_' => 'master-item',
					'value_type' => '4'
				]
			]
		]);
	}
}