<?php
/* Copyright (C) 2026		Eduard Wisch				<data@data-it-solution.de>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

/**
 * \file    kundenkarte/lib/kundenkarte.lib.php
 * \ingroup kundenkarte
 * \brief   Library files with common functions for KundenKarte
 */

/**
 * Prepare admin pages header
 *
 * @return array<array{string,string,string}>
 */
function kundenkarteAdminPrepareHead()
{
	global $langs, $conf;

	// global $db;
	// $extrafields = new ExtraFields($db);
	// $extrafields->fetch_name_optionals_label('myobject');

	$langs->load("kundenkarte@kundenkarte");

	$h = 0;
	$head = array();

	$head[$h][0] = dol_buildpath("/kundenkarte/admin/setup.php", 1);
	$head[$h][1] = $langs->trans("Settings");
	$head[$h][2] = 'settings';
	$h++;

	$head[$h][0] = dol_buildpath("/kundenkarte/admin/anlage_systems.php", 1);
	$head[$h][1] = $langs->trans("AnlagenSystems");
	$head[$h][2] = 'systems';
	$h++;

	$head[$h][0] = dol_buildpath("/kundenkarte/admin/anlage_types.php", 1);
	$head[$h][1] = $langs->trans("AnlagenTypes");
	$head[$h][2] = 'types';
	$h++;

	$head[$h][0] = dol_buildpath("/kundenkarte/admin/equipment_types.php", 1);
	$head[$h][1] = $langs->trans("EquipmentTypes");
	$head[$h][2] = 'equipment_types';
	$h++;

	$head[$h][0] = dol_buildpath("/kundenkarte/admin/busbar_types.php", 1);
	$head[$h][1] = $langs->trans("BusbarTypes");
	$head[$h][2] = 'busbar_types';
	$h++;

	$head[$h][0] = dol_buildpath("/kundenkarte/admin/medium_types.php", 1);
	$head[$h][1] = $langs->trans("MediumTypes");
	$head[$h][2] = 'medium_types';
	$h++;

	$head[$h][0] = dol_buildpath("/kundenkarte/admin/building_types.php", 1);
	$head[$h][1] = $langs->trans("BuildingTypes");
	$head[$h][2] = 'building_types';
	$h++;

	$head[$h][0] = dol_buildpath("/kundenkarte/admin/backup.php", 1);
	$head[$h][1] = $langs->trans("BackupRestore");
	$head[$h][2] = 'backup';
	$h++;

	/*
	$head[$h][0] = dol_buildpath("/kundenkarte/admin/myobject_extrafields.php", 1);
	$head[$h][1] = $langs->trans("ExtraFields");
	$nbExtrafields = (isset($extrafields->attributes['myobject']['label']) && is_countable($extrafields->attributes['myobject']['label'])) ? count($extrafields->attributes['myobject']['label']) : 0;
	if ($nbExtrafields > 0) {
		$head[$h][1] .= '<span class="badge marginleftonlyshort">' . $nbExtrafields . '</span>';
	}
	$head[$h][2] = 'myobject_extrafields';
	$h++;

	$head[$h][0] = dol_buildpath("/kundenkarte/admin/myobjectline_extrafields.php", 1);
	$head[$h][1] = $langs->trans("ExtraFieldsLines");
	$nbExtrafields = (isset($extrafields->attributes['myobjectline']['label']) && is_countable($extrafields->attributes['myobjectline']['label'])) ? count($extrafields->attributes['myobject']['label']) : 0;
	if ($nbExtrafields > 0) {
		$head[$h][1] .= '<span class="badge marginleftonlyshort">' . $nbExtrafields . '</span>';
	}
	$head[$h][2] = 'myobject_extrafieldsline';
	$h++;
	*/

	$head[$h][0] = dol_buildpath("/kundenkarte/admin/about.php", 1);
	$head[$h][1] = $langs->trans("About");
	$head[$h][2] = 'about';
	$h++;

	// Show more tabs from modules
	// Entries must be declared in modules descriptor with line
	//$this->tabs = array(
	//	'entity:+tabname:Title:@kundenkarte:/kundenkarte/mypage.php?id=__ID__'
	//); // to add new tab
	//$this->tabs = array(
	//	'entity:-tabname:Title:@kundenkarte:/kundenkarte/mypage.php?id=__ID__'
	//); // to remove a tab
	complete_head_from_modules($conf, $langs, null, $head, $h, 'kundenkarte@kundenkarte');

	complete_head_from_modules($conf, $langs, null, $head, $h, 'kundenkarte@kundenkarte', 'remove');

	return $head;
}

/**
 * Render an icon - either Font Awesome or custom image
 *
 * @param string $picto Icon identifier (fa-xxx or img:url)
 * @param string $alt Alt text for images
 * @param string $style Additional inline style
 * @return string HTML for the icon
 */
function kundenkarte_render_icon($picto, $alt = '', $style = '')
{
	if (empty($picto)) {
		return '<i class="fa fa-cube"'.($style ? ' style="'.$style.'"' : '').'></i>';
	}

	// Check if it's a custom image (starts with img:)
	if (strpos($picto, 'img:') === 0) {
		$url = substr($picto, 4); // Remove 'img:' prefix
		$styleAttr = 'max-width:20px;max-height:20px;vertical-align:middle;'.($style ? $style : '');
		return '<img src="'.dol_escape_htmltag($url).'" alt="'.dol_escape_htmltag($alt).'" style="'.$styleAttr.'">';
	}

	// Font Awesome icon
	return '<i class="fa '.dol_escape_htmltag($picto).'"'.($style ? ' style="'.$style.'"' : '').'></i>';
}

/**
 * Get icon for a field based on field code or type
 *
 * @param string $fieldCode Field code
 * @param string $fieldType Field type
 * @return string Font Awesome icon class
 */
function kundenkarte_get_field_icon($fieldCode, $fieldType = '')
{
	// Map common field codes to icons
	$codeIcons = array(
		'standort' => 'fa-map-marker',
		'location' => 'fa-map-marker',
		'ort' => 'fa-map-marker',
		'raum' => 'fa-door-open',
		'room' => 'fa-door-open',
		'zimmer' => 'fa-door-open',
		'etage' => 'fa-layer-group',
		'floor' => 'fa-layer-group',
		'stockwerk' => 'fa-layer-group',
		'gebaeude' => 'fa-building',
		'building' => 'fa-building',
		'adresse' => 'fa-home',
		'address' => 'fa-home',
		'hersteller' => 'fa-industry',
		'manufacturer' => 'fa-industry',
		'modell' => 'fa-tag',
		'model' => 'fa-tag',
		'seriennummer' => 'fa-barcode',
		'serial' => 'fa-barcode',
		'leistung' => 'fa-bolt',
		'power' => 'fa-bolt',
		'spannung' => 'fa-plug',
		'voltage' => 'fa-plug',
		'strom' => 'fa-bolt',
		'current' => 'fa-bolt',
		'datum' => 'fa-calendar',
		'date' => 'fa-calendar',
		'installation' => 'fa-wrench',
		'wartung' => 'fa-tools',
		'maintenance' => 'fa-tools',
		'ip' => 'fa-network-wired',
		'ip_adresse' => 'fa-network-wired',
		'mac' => 'fa-ethernet',
		'telefon' => 'fa-phone',
		'phone' => 'fa-phone',
		'notiz' => 'fa-sticky-note',
		'note' => 'fa-sticky-note',
		'bemerkung' => 'fa-comment',
		'comment' => 'fa-comment',
	);

	// Check field code (lowercase)
	$codeLower = strtolower($fieldCode);
	foreach ($codeIcons as $key => $icon) {
		if (strpos($codeLower, $key) !== false) {
			return $icon;
		}
	}

	// Fallback based on field type
	$typeIcons = array(
		'date' => 'fa-calendar',
		'number' => 'fa-hashtag',
		'textarea' => 'fa-align-left',
		'select' => 'fa-list',
		'checkbox' => 'fa-check-square',
	);

	if (isset($typeIcons[$fieldType])) {
		return $typeIcons[$fieldType];
	}

	// Default icon
	return 'fa-info-circle';
}

/**
 * Adjust a hex color by a percentage
 *
 * @param string $hex Hex color (e.g., #2a4a5e)
 * @param int $percent Percentage to adjust (-100 to 100, negative = darker)
 * @return string Adjusted hex color
 */
function kundenkarte_adjust_color($hex, $percent)
{
	// Remove # if present
	$hex = ltrim($hex, '#');

	// Parse RGB values
	$r = hexdec(substr($hex, 0, 2));
	$g = hexdec(substr($hex, 2, 2));
	$b = hexdec(substr($hex, 4, 2));

	// Adjust each component
	$r = max(0, min(255, $r + $percent));
	$g = max(0, min(255, $g + $percent));
	$b = max(0, min(255, $b + $percent));

	// Return as hex
	return sprintf('#%02x%02x%02x', $r, $g, $b);
}
