<?php
// get for intelectra geraetezuordnung

/*if ($obj->attribute_17 != '') {
	$sql = "SELECT * FROM import_geraetezuordnung WHERE anr='".$obj->attribute_17."'";
	$result = $this->db->query($sql);
}
else {
	$sql = "SELECT * FROM import_geraetezuordnung WHERE anr='".$obj->number."'";
	$result = $this->db->query($sql);
}*/

$result = null;

// COMMENTED OUT - Wrong mapping logic
/*if (strlen($obj->number) == 8) {
	$sql = "SELECT g.*
			FROM krempl_geraete_22 g
			INNER JOIN krempl_artikelgeraet_22 ag ON g.id = ag.geraet
			INNER JOIN krempl_passendwie pw ON ag.ersatzteil = pw.id
			INNER JOIN items i ON pw.navisionid = i.krempl_id
			WHERE i.number = ".$this->db->real_escape_string($obj->number).";";
	$result = $this->db->query($sql);
}*/

// ORIGINAL MONSTER-SQL (PERFORMANCE-KILLER!) 
// 4-fach JOIN über 1.3M Zeilen krempl_artikelgeraet_22 = HORROR!
/*
ORIGINAL MONSTER-QUERY - AUSKOMMENTIERT FÜR STEP-BY-STEP ZERLEGUNG:
SELECT g.*
FROM krempl_geraete_22 g                           -- Gerätedaten (Ziel)
INNER JOIN krempl_artikelgeraet_22 ag ON g.id = ag.geraet    -- 1.3M ROWS N:M Mapping!
INNER JOIN krempl_passendwie pw ON ag.ersatzteil = pw.id     -- Ersatzteil-Mapping
INNER JOIN items i ON (                             -- Item-Verknüpfung
    pw.navisionid = i.attribute_7                   -- Legacy Items
    OR (LENGTH(i.number) >= 8 AND pw.navisionid = i.number)  -- Moderne Items
)
WHERE i.number = obj->number

LOGIK:
1. Items (i) → finde Ersatzteile über attribute_7 oder number
2. Ersatzteile (pw) → finde krempl_artikelgeraet_22 Mappings
3. Mappings (ag) → finde passende Geräte
4. Geräte (g) → liefere Gerätedaten
*/

// STEP-BY-STEP ZERLEGUNG (Performance-Optimiert):
// FIX: Läuft für number >= 8 ODER wenn attribute_7 vorhanden (Legacy-Artikel)
if (strlen($obj->number) >= 8 || !empty($obj->attribute_7)) {

	// STEP 1: Finde Ersatzteil-IDs für dieses Item
	$ersatzteil_ids = array();
	
	// Query 1A: Legacy Items (über attribute_7)
	if (!empty($obj->attribute_7)) {
		$sql1a = "SELECT id FROM krempl_passendwie WHERE navisionid = ".$this->db->real_escape_string($obj->attribute_7);
		$result1a = $this->db->query($sql1a);
		if ($result1a) {
			while ($row = $result1a->fetch_assoc()) {
				$ersatzteil_ids[] = $row['id'];
			}
		}
	}
	
	// Query 1B: Moderne Items (über number, wenn >= 8 Zeichen)
	$sql1b = "SELECT id FROM krempl_passendwie WHERE navisionid = ".$this->db->real_escape_string($obj->number);
	$result1b = $this->db->query($sql1b);
	if ($result1b) {
		while ($row = $result1b->fetch_assoc()) {
			$ersatzteil_ids[] = $row['id'];
		}
	}
	
	// STEP 2: Finde Geräte-IDs für diese Ersatzteile
	$geraet_ids = array();
	if (!empty($ersatzteil_ids)) {
		$ersatzteil_list = implode(',', array_map('intval', $ersatzteil_ids));
		$sql2 = "SELECT DISTINCT geraet FROM krempl_artikelgeraet_22 WHERE ersatzteil IN ($ersatzteil_list)";
		$result2 = $this->db->query($sql2);
		if ($result2) {
			while ($row = $result2->fetch_assoc()) {
				$geraet_ids[] = $row['geraet'];
			}
		}
	}
	
	// STEP 3: Hole finale Gerätedaten
	$result = false;
	if (!empty($geraet_ids)) {
		$geraet_list = implode(',', array_map('intval', $geraet_ids));
		$sql3 = "SELECT * FROM krempl_geraete_22 WHERE id IN ($geraet_list)";
		$result = $this->db->query($sql3);
		if (!$result) {
			$result = false; // Explizit setzen für Fallback
		}
	} else {
		$result = false; // Explizit setzen für Fallback
	}
}

if (!empty($obj->krempl_id) && (!isset($result) || !$result || $result->num_rows < 1)) {
	$sql = "SELECT * FROM krempl_artikelgeraet_22 ka
			left join krempl_geraete_22 kg on kg.id=ka.geraet
			WHERE ka.ersatzteil=".$this->db->real_escape_string($obj->krempl_id)." AND not isnull(nr)";
	$result = $this->db->query($sql);
}

$obj->geraetezuordnung = array();
if ($result) {
	while ($obj1 = $result->fetch_object()) {
		$obj->geraetezuordnung[] = $obj1;
	}
}



// get parent warengruppe
$sql = "select i.name, s.name, s2.name as wg from items i
		left join item_structure_assign isa on isa.item_id=i.id
		left join structure s on s.id=isa.structure_id
		left join structure s2 on s2.id=s.parent_id
		where i.id=".$obj->id.' AND s.active=1 LIMIT 1';
$result = $this->db->query($sql);
$parent_warengruppe = '';
if ($result) {
	while ($obj1 = $result->fetch_object()) {
		$parent_warengruppe = $obj1->wg;
	}
}

$table_data = array();
foreach ($obj->geraetezuordnung as $geraet) {
	$nr1 = str_replace('#', '', $geraet->nr);
	$nr1 = str_replace('_', ' ', $nr1);
	$nr2 = str_replace('#', '', $geraet->produktionsstart);
	$nr2 = str_replace('_', ' ', $nr2);
	$nr3 = str_replace('#', '', $geraet->produktionsende);
	$nr3 = str_replace('_', ' ', $nr3);
	$nr3 = empty($nr3) ? "" : " - ".$nr3;
	$nr2 = $nr2.$nr3;
	$bezeichnungoriginal = str_replace('#', '', $geraet->bezeichnungoriginal);
	$bezeichnungoriginal = str_replace('_', ' ', $bezeichnungoriginal);
	$bezeichnungoriginal = preg_replace('/\r\n|\n|\r/', '', $bezeichnungoriginal);

	// Überprüfe, ob $bezeichnungoriginal leer ist, und verwende $geraet->modellBezeichnung falls ja
	if (empty($bezeichnungoriginal) && !empty($geraet->modellBezeichnung)) {
		$bezeichnungoriginal = str_replace('#', '', $geraet->modellBezeichnung);
		$bezeichnungoriginal = str_replace('_', ' ', $bezeichnungoriginal);// Ersetze durch modellBezeichnung
	} elseif (empty($bezeichnungoriginal)) {
		$bezeichnungoriginal = "-"; // Oder einen Platzhalter, wenn auch modellBezeichnung leer ist
	}


	$einkaufsmoeglichkeitencached = $nr1." ".$nr2;
	$table_data[$einkaufsmoeglichkeitencached][$bezeichnungoriginal][] = array($nr1, $nr2);
}


/* $html = '<table border="0" cellpadding="2" cellspacing="0">';
foreach ($table_data as $key => $marken) {
	$y = 0;
	$html .= '<tr class="intelectra_item_table_header"><td colspan="3"><h4><b>'.$obj->name.' passend zu '.$key.' '.$parent_warengruppe.'</b></h4></tr>';
	$html .= '<tr class="intelectra_item_table_header"><td>Ger&auml;te-/Modellbezeichnung</td><td>E-, Service-, Produktions- oder Hauptnummer</td><td>Zusatz-, F- oder Seriennummer oder Fertigungsdatum</td></tr>';
	foreach ($marken as $geraet => $nummern) {
		$color = 'intelectra_table_row1';
		if ($y % 2 == 1) {
			$color = 'intelectra_table_row2';
		}
		$z = 0;
		foreach ($nummern as $nummer) {
			if ($z == 0) {
				$html .= '<tr class="'.$color.'"><td>'.$geraet.'</td><td>'.$nummer[0].'</td><td>'.$nummer[1].'</td></tr>';
			} else {
				$html .= '<tr class="'.$color.'"><td>&nbsp;</td><td>'.$nummer[0].'</td><td>'.$nummer[1].'</td></tr>';
			}
			$z++;
		}
		$y++;
	}
}
$html .= '</table>'; */


$html = '<div class="tba_container">';

foreach ($table_data as $key => $marken) {
    $y = 0;

    // Eine einzige Überschrift pro Artikel
    if ($y == 0) {
        $html .= '<div class="tba_section">';
        $html .= '<div class="tba_header"><h4><b>'.$obj->name.' passend zu '.$key.' '.$parent_warengruppe.'</b></h4></div>';
        $html .= '<div class="tba_grid_header">';
        $html .= '<div class="tba_col">Geräte-/Modellbezeichnung</div>';
        $html .= '<div class="tba_col">E-, Service-, Produktions- oder Hauptnummer</div>';
        $html .= '<div class="tba_col">Zusatz-, F- oder Seriennummer oder Fertigungsdatum</div>';
        $html .= '</div>'; // Header-Ende
    }

    foreach ($marken as $geraet => $nummern) {
        $colorClass = ($y % 2 == 1) ? 'tba_row_odd' : 'tba_row_even';
        $z = 0;

        foreach ($nummern as $nummer) {
            $html .= '<div class="tba_grid ' . $colorClass . '">';
            if ($z == 0) {
                $html .= '<div class="tba_col">'.$geraet.'</div>';
            } else {
                $html .= '<div class="tba_col">&nbsp;</div>';
            }
            $html .= '<div class="tba_col mitlink"><a href="#" class="geraete-link" data-nr="'.htmlentities($nummer[0]).'">'.htmlentities($nummer[0]).'</a></div>';
            $html .= '<div class="tba_col">'.$nummer[1].'</div>';
            $html .= '</div>'; // Zeile Ende
            $z++;
        }
        $y++;
    }

    $html .= '</div>'; // Section Ende
}

$html .= '</div>'; // Container Ende

$shopArticle->geraetezuordnung = $html;



$int = $this->createIntWithTableData($html);


// base price calc
if ($obj->attribute_11 && $obj->attribute_15) {
	$obj->sample_unit = $obj->attribute_15;
	if (strstr($obj->sample_unit, '100')) {
		$obj->sample_price = $obj->shop_price_1 / ($obj->attribute_11 * 10);
	} else {
		$obj->sample_price = $obj->shop_price_1 / $obj->attribute_11;
	}
}
