"""
import os
import sys
import json
import pydicom
import numpy as np
from PIL import Image

def adjust_contrast(image):
    # Apply contrast adjustment here
    # For example, you can normalize the pixel values
    normalized_image = (image - np.min(image)) / (np.max(image) - np.min(image)) * 255
    return normalized_image.astype(np.uint8)

def convert_frames(input_file, output_folder):
    # Verifica se o diretório de saída existe, se não, cria
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # Carrega o arquivo DICOM
    dicom_data = pydicom.dcmread(input_file)

    frames_list = []

    # Verifica se o arquivo DICOM é multi-frame
    if 'NumberOfFrames' in dicom_data:
        for i in range(dicom_data.NumberOfFrames):
            # Gera o nome de arquivo para o quadro atual
            output_file = os.path.join(output_folder, f"frame_{i}.png")

            # Obtém o quadro atual
            frame = dicom_data.pixel_array[i]

            # Aplica ajuste de contraste
            adjusted_frame = adjust_contrast(frame)

            # Converte para imagem PIL
            image = Image.fromarray(adjusted_frame)

            # Salva o quadro como arquivo PNG
            image.save(output_file)

            # Adiciona a localização do quadro à lista
            frames_list.append(output_file)
    else:
        # Se for uma única frame, processa normalmente
        # Gera o nome de arquivo para o quadro
        output_file = os.path.join(output_folder, "frame_0.png")

        # Obtém a imagem do DICOM
        frame = dicom_data.pixel_array

        # Aplica ajuste de contraste
        adjusted_frame = adjust_contrast(frame)

        # Converte para imagem PIL
        image = Image.fromarray(adjusted_frame)

        # Salva a imagem como arquivo PNG
        image.save(output_file)

        # Adiciona a localização da imagem à lista
        frames_list.append(output_file)

    return frames_list

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Uso: python script.py folder/dicomfile.dicom output/")
        sys.exit(1)

    input_file = sys.argv[1]
    output_folder = sys.argv[2]

    # Converte os quadros e obtém a lista de localizações
    frames_list = convert_frames(input_file, output_folder)

    # Retorna a lista de localizações em formato JSON
    print(json.dumps(frames_list))
"""
import os
import sys
import json
import pydicom
import numpy as np
from PIL import Image

def adjust_contrast(image):
    # Apply contrast adjustment here
    # For example, you can normalize the pixel values
    normalized_image = (image - np.min(image)) / (np.max(image) - np.min(image)) * 255
    return normalized_image.astype(np.uint8)

def convert_frames(input_file, output_folder,filename):
    #Verifier si le dossier existe ppas, alors creer
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    #Charger le dicom
    dicom_data = pydicom.dcmread(input_file)

    frames_list = []

    # Verifier si plusieurs frames
    if 'NumberOfFrames' in dicom_data:
        # si oui parcourir chacun
        for i in range(dicom_data.NumberOfFrames):
            #Generer le nom de sortie
            output_file = os.path.join(output_folder, filename + f"_{i}_modal.jpeg")

            #Obtenir frame actuel
            frame = dicom_data.pixel_array[i]

            #Appliquer contraste
            adjusted_frame = adjust_contrast(frame)

            #Convertir en image PIL
            image = Image.fromarray(adjusted_frame)

            #Sauvegarder comme pdf
            image.save(output_file)

            # Adiciona a localização do quadro à lista
            frames_list.append(output_file)
    # si non qlors
    else:
        #generer le nom
        output_file = os.path.join(output_folder, filename + "_modal.jpeg") 

        #obtenir le image du dicom
        frame = dicom_data.pixel_array

        #ajuster le contraste
        adjusted_frame = adjust_contrast(frame)

        #Convertir le image en image PIL
        image = Image.fromarray(adjusted_frame)

        #Sauvegarder comme PNG
        image.save(output_file)

        # Ajouter a la liste dimages
        frames_list.append(output_file)

    return frames_list

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Use: python script.py folder/dicomfile.dicom output/ filename(sans extension)")
        sys.exit(1)

    input_file = sys.argv[1]
    output_folder = sys.argv[2]
    filename = sys.argv[3]

    # convertir et obtenir la liste
    frames_list = convert_frames(input_file, output_folder, filename)

    # Retourner la liste dans le format JSON
    print(json.dumps(frames_list))
