from PIL import Image
img = Image.open("seam_carving.jpg")
h,w=img.size

image = [[0 for j in range(w)] for i in range(h)]
for i  in range(h):
   for j in range(w):
       image[i][j]=img.getpixel((i,j))

def energie(img:list,i:int,j:int) -> int:
   '''Calcule l'énergie du pixerl (i,j) de img.'''
   h=len(img)
   w=len(img[0])
   if i == 0:
               vx = int(sum(img[1][j])/3) - int(sum(img[0][j])/3)
   elif i == h - 1:
               vx = int(sum(img[i][j])/3) - int(sum(img[i-1][j])/3)
   else:
               vx = (int(sum(img[i+1][j])/3) - int(sum(img[i-1][j])/3))/2
   if j == 0:
               vy = int(sum(img[i][1])/3) - int(sum(img[i][0])/3)
   elif j == w - 1:
               vy = int(sum(img[i][j])/3) - int(sum(img[i][j-1])/3)
   else:
               vy = (int(sum(img[i][j+1])/3) - int(sum(img[i][j+1])/3))/2

   return abs(vx)+abs(vy)

# Question 3
def calcule_tab_energie(image):
    pass

# Question 4 
def calcul_energie(couture,tab_energie):
    pass

# Question 5
def indices_proches(m,i,j):
    pass
    
# Question 6
    
def min_energie(tab_energie,indices_pixels):
    i,j=indices_pixels[0][0],indices_pixels[0][1] # coordonnées du premier pixel de indices_pixels
    mini=tab_energie[i][j] # mini provisoire
    pixel_mini=(i,j) # Champion provisoire
    for elt in indices_pixels:
        pass #methode du champion
    
    
    
    return pixel_mini
    


def calcule_couture(j,tab_energie):
    pass

#Question 7
def best_couture(tab_energie):
    pass







####################################
#Pour afficher en rouge la couture #
####################################

#tester la fonction ci-dessous :

def afficher_une_couture():
    img = Image.open("seam_carving.jpg")
    nb_couture=150
    tab_energie=calcule_tab_energie(image)
    couture_mini=best_couture(tab_energie)

    for i,j in couture_mini[1]:
        img.putpixel((j,i),(255,0,0))
    img.show()




#################################
#Pour supprimer la couture rouge#
#################################



def carve():
    nb_couture=int(input("Nombre de coutures : "))
    img = Image.open("seam_carving.jpg")
    img.show()
    L=[] # coordonnées des pixels de toutes les coutures
    for i in range(nb_couture): 
        h,w=img.size
        print("largeur image : " , h)
        image = [[0 for j in range(w)] for i in range(h)]
        for i  in range(h):
            for j in range(w):
                image[i][j]=img.getpixel((i,j))
        tab_energie=calcule_tab_energie(image)
        couture_mini=best_couture(tab_energie)[1]
        for elt in couture_mini :
            L.append(elt)
        img2=Image.new("RGB",(h-1,w))
        for j in range(w): #hauteur
            for i  in range(h-1): #largeur
                if i<couture_mini[j][1]:
                    r,g,b=img.getpixel((i,j))
                    img2.putpixel((i,j),(r,g,b))
                else:
                    r,g,b=img.getpixel((i,j))
                    img2.putpixel((i-1,j),(r,g,b))
        for i,j in couture_mini:
            img.putpixel((j,i),(255,0,0))

        img=img2.copy()
    img2.show()


    # On va colorier tous les pixels des coutures en rouge
    img = Image.open("seam_carving.jpg")
    for elt in L: # Tousles pixels  des coutures
        i,j=elt[0],elt[1]
        img.putpixel((j,i),(255,0,0)) # pixel rouge
    img.show()


#A vous de supprimer 50 coutures
# Avec best_couture (version gloutonne)



# Reprendre la question 7 mais en version dynamique
# On veut être sûr d'avoir la meilleur couture

