#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""Outils pour environnements de démo.

Change aléatoirement les identites (nip, civilite, nom, prenom) des étudiants.
Un semestre ou tous si non spécifié.

Le NIP est choisi aléatoirement (nombre entier à 8 chiffres).
Les noms et prénoms sont issus des fichiers noms.txt, prenoms-h.txt, prenoms-f.txt
(ce sont simlement les plus fréquemment rencontrés en France).
La civilité est choisie aléatoirement 50-50 Homme/Femme.
"""

import sys
import random
import psycopg2

from gen_nomprenoms import nomprenom


def usage():
    print(f"Usage: {sys.argv[0]} dbname [formsemestre_id]")
    sys.exit(1)


if len(sys.argv) not in (2, 3):
    usage()

dbname = sys.argv[1]
formsemestre_id = sys.argv[2] if len(sys.argv) > 2 else None
DBCNXSTRING = f"dbname={dbname}"

# Liste des etudiants inscrits à ce semestre
cnx = psycopg2.connect(DBCNXSTRING)
cursor = cnx.cursor()

if formsemestre_id is None:
    cursor.execute("SELECT i.id from identite i")
else:
    cursor.execute(
        "select count(*) from notes_formsemestre where id=%(formsemestre_id)s",
        {"formsemestre_id": formsemestre_id},
    )
    nsem = cursor.fetchone()[0]
    if nsem != 1:
        print(f"{nsem} formsemestre matching {formsemestre_id} in {dbname}")
        sys.exit(2)
    cursor.execute(
        """select i.id
        from identite i, notes_formsemestre_inscription ins
        where i.id=ins.etudid and ins.formsemestre_id=%(formsemestre_id)s
        """,
        {"formsemestre_id": formsemestre_id},
    )

wcursor = cnx.cursor()
n = 0
for (etudid,) in cursor:
    civilite = random.choice(("M", "F"))  # pas de neutre, on pourrait ajouter 'X'
    nom, prenom = nomprenom(civilite)
    print(f"{etudid}: {nom}\t{prenom}")
    args = {
        "nom": nom,
        "prenom": prenom,
        "civilite": civilite,
        "etudid": etudid,
        "code_nip": random.randrange(10000000, 99999999),
    }
    req = "update identite set nom=%(nom)s, prenom=%(prenom)s, civilite=%(civilite)s where id=%(etudid)s"
    # print( req % args)
    wcursor.execute(req, args)
    n += 1


cnx.commit()
cnx.close()

print(f"changed {n} identities", file=sys.stderr)