import re

# Extraire les segments du fichier de log
def extract_segments(log_content):
    segments = []
    segment = []
    for line in log_content:
        if line.startswith("Index:"):
            if segment:
                segments.append(segment)
            segment = [line]
        else:
            segment.append(line)
    if segment:
        segments.append(segment)
    return segments

# Extraire les octets inversés de chaque segment
def extract_inverted_bytes(segment):
    inverted_bytes = []
    for line in segment:
        match = re.search(r'Inverted Byte: (\d+)', line)
        if match:
            inverted_byte = int(match.group(1))
            inverted_bytes.append(inverted_byte)
    return inverted_bytes

# Nouvelle fonction pour combiner les octets inversés en vérifiant les duplications
def combine_inverted_bytes(segments):
    combined_bytes = []
    for segment in segments:
        inverted_bytes = extract_inverted_bytes(segment)
        for i, byte in enumerate(inverted_bytes):
            if i >= len(combined_bytes):
                combined_bytes.append(byte)
            elif combined_bytes[i] != byte:
                combined_bytes.append(byte)
    return combined_bytes

# Lire le contenu du fichier de log
log_file_path = '/var/www/html/modification_carto/matching_segments.log'
with open(log_file_path, 'r') as file:
    log_content = file.readlines()

# Analyser les segments pour reconstituer le MCUID
segments = extract_segments(log_content)
combined_inverted_bytes = combine_inverted_bytes(segments)

# Définir le MCUID attendu
mcuid_hex = "41848a850960a14682060010240d0500"
mcuid_bytes = bytes.fromhex(mcuid_hex)

# Convertir les octets inversés combinés en hexadécimal
mcuid_found_combined = ''.join(f'{byte:02X}' for byte in combined_inverted_bytes[:len(mcuid_bytes)])

print(f"Extracted MCUID: {mcuid_found_combined}")
