from woufU import repertoires,sauv_ex,sauv_corr,prenom
from random import choice

import pdfkit

config = pdfkit.configuration(wkhtmltopdf="C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe")
options = {
    'page-size': 'Letter',
    'margin-top': '0.75in',
    'margin-right': '0.75in',
    'margin-bottom': '0.75in',
    'margin-left': '0.75in',
    'encoding': "UTF-8",
    'quiet': ''
    }

univers="0123456789"
def mmm(ta=[],un=univers):
    """ un est l'univers des possibles
     ta est un tableau contenant les jeux déjà fait
    de la forme : "AAAA",[2,0] - bien placé, mal placé 
    mmm renvoie les jeux possibles
    """
    possibles=["".join([a,b,c,d]) for a in un for b in un for c in un for d in un]
    
    for t in ta:
        remove=[]
        ch=t[0]
        n,p=t[1]
        #print("Debug : ",ch,n,p)
        for po in possibles:
            if nbbp(ch,po)!=n or nbmp(ch,po)!=p:
                #print("Debug REmove: ",po)
                remove.append(po)
            else:
                pass
                #print("Debug ACCEPT!: ",po)
        for po in remove:
            possibles.remove(po)
    return possibles

def nbbp(ch,modele):
    n=0
    for i in range(len(modele)):
       
        if ch[i]==modele[i]:
            n+=1
       
    return n
  
def nbmp(ch,modele):
   #On enleve les bien placés
   ch2=""
   modele2=""
   for i in range(len(modele)):
       if ch[i]!=modele[i]:
           ch2+=ch[i]
           modele2+=modele[i]
   n=0
   deja=[] 
   #print("debug ",ch2,modele2)      
   for i in range(len(modele2)):
       j=0
       while j < len(ch2):
           #print("Debug2 ",i,j,ch2[j],modele2[i])
           if ch2[j]==modele2[i] and j not in deja:
               deja.append(j)
               n+=1
               #print("Debug3---FIND! ",ch2[j],i,j,n,deja)
               j=len(ch2)
           else:
               j+=1
   return n
   
def jeu():
    a=input("En utilsant les caractères {}, pensez à une combinaison et appuyer sur ENTREE".format(univers))
    jeux=[]
    fini=False
    while not fini:
        #print("debug",jeux)
        reponse=mmm(jeux)
        if len(reponse)==0:
            print("ERREUR dans vos réponses !")
            fini=True
        elif len(reponse)==1:
            a=input("La solution est {}".format(reponse[0]))
            fini=True
            
        else:
            j=choice(reponse)
            print("Je propose {}".format(j))
            n=int(input("Nombre de caractères bien placés :"))
            p=int(input("Nombre de caractères mal placés :"))
            jeux.append([j,[n,p]])
            
            
def creer_enigme():
    
    combi=choice(univers)+choice(univers)+choice(univers)+choice(univers)
    
    while 1:
        jeux=[]
        fini=False
        while not fini:
            reponse=mmm(jeux)
            #print("debug",jeux)
            if len(reponse)==1 and jeux[-1][0]!=reponse[0] and len(jeux)<5:
                return jeux,reponse[0]
            
            elif len(reponse)==1 and jeux[-1][0]==reponse[0] or len(jeux)>4:
                jeux=[]
            else:
                j=choice(reponse) 
                n=nbbp(j,combi) 
                p=nbmp(j,combi)
                jeux.append([j,[n,p]])

def exercice1():
    j1=prenom()
    j2=prenom()
    dico={"j1":j1,"j2":j2}
    htm="""<h2>Dogs and cats (Chiens et chats)</h2>
    <p> {j1} et {j2} jouent ensemble à Dogs and cats (Une variante d'un jeu ancien appelé "Bulls and Cows" 
     qui est l'ancêtre du célèbre Mastermind)</p>
     <p> {j1} a choisi une combinaison de quatre chiffres (entre 0 et 9) et tente de la faire deviner à {j2}.</p>
     <p> A chaque essai de {j2}, {j1} répond par un dessin :</p>
     <ul><li> Pour chaque chiffre bien placé, {j1} dessine un chien.</li>
     <li> Pour chaque chiffre mal placé, {j1} dessine un chat.</li></ul>
     <h3>Voici le début de la partie, la combinaison est maintenant trouvable, à toi de jouer !</h3>
          """.format(**dico)
    enigme=creer_enigme()
    for e in enigme[0]:
        htm+="""<h4 style="margin:0;"> {} </h4>""".format(e[0])
        with open("{}_{}.svg".format(*e[1]), "r", encoding='utf-8') as f:
          svg=f.read()
          
        svg.replace("""<?xml version="1.0" encoding="UTF-8" standalone="no"?>""","")
        htm+=svg
        
    corr="""<h2>Dogs and cats (Chiens et chats)</h2>
    <p>La combinaison était {} </p>""".format(enigme[1])
    return htm,corr
                                                                   


haut_de_page= """<h3 style="color:#a5a5c0; margin-bottom:-10px;">Fiche : {}</h3>"""
bas_de_page="""<div style="margin-top:-3px; text-align:right">
<p styl
e="page-break-after: always"><a  href="https://site2wouf.fr">(C) https://site2wouf.fr (2021)</a></p></div>"""
fin="""<div style="margin-top:-3px; text-align:right">
<p><a  href="https://site2wouf.fr">(C) https://site2wouf.fr (2021)</a></p></div>"""
repertoires()
for j in range(1,401):
    print(j)
    enn1,corr1=exercice1()
   
    sauv_ex(j,enn1)
    sauv_corr(j,corr1)
    chaine=haut_de_page.format(str(j)+ "&nbsp;&nbsp;&nbsp;&nbsp;  1/2")
    chaine+="""<h1 style="color:red; text-align:center">&hearts; Dogs and cats.</h1><div style="margin-left:100px;font-size:16px">"""+enn1+"</div>"
   
    chaine+=bas_de_page
    chaine+=haut_de_page.format(str(j)+ "&nbsp;&nbsp;&nbsp;&nbsp;  3/4")
    chaine+="""<h1 style="color:red; text-align:center">&hearts;  Dogs and cats. - Correction -</h1><div style="margin-left:100px;font-size:16px">"""+corr1+"</div>"
    
 
    chaine+=fin
    pdfkit.from_string(chaine,"exercices_pdf\exercices{0}.pdf".format(j),configuration=config,options=options)