# -*- coding: utf-8 -*-
#----------------------
'''
 1720994,5 = 365,25*4716 - 1524,5 où 4716 est une constante qui a été
 ajoutée à la formule pour éviter les problèmes des années négatives,
 et 1524,5 est un décalage pour garantir que JD soit égale à 0,0 à
 midi le 1er janvier -4712 dans le calendrier julien.
 Nous nous contenterons ici des années 1583 à 9999.
'''
import datetime
#----------------------------------------------------- choisir l'option
def choisir() :
    global choix
    
    print()    
    print(" choisissez le chiffre de l'une des options suivantes")
    print(" ----------------------------------------------------")
    print("        date et heure du système............= 1")
    print("        date et heure manuelle..............= 2")
    print()
    choix = input("    Entrez le numéro de l'option choisie : ")
    try :
        choix = int(choix)
    except :
        print("Vous devez taper uniquement un chiffre, rien d'autre")
        print()
        choisir() # tourniquet pour chiffre non conforme
    
    if choix < 1 :
        print("         Erreur se chiffre est trop petit !")
        choisir()  # tourniquet pour chiffre trop petit
        
    if choix > 2 :
        print("         Erreur se chiffre est trop grand !")    
        choisir()  # tourniquet pour chiffre trop grand
    
    return
#----------------------------------------------------- voir si l'année ext bissextile
def bissex() :
    global bx
    
    if année % 4 == 0 and année % 100 != 0 or année % 400 == 0 :
        bx = 1
    else :
        bx = 0
    
    return
#----------------------------------------------------- date système
def dt_sys() :
    global année
    global mois
    global date
    
    année = datetime.date.today().strftime("%Y")
    année = int(année)
    mois = datetime.date.today().strftime("%m")
    mois = int(mois)
    date = datetime.date.today().strftime("%d")
    date = int(date)
    bissex()
    
    return
#----------------------------------------------------- heure système
def hr_sys() :
    global heure
    global minute
    global seconde
    
    import datetime
    
    heure = (float(datetime.datetime.now().strftime("%H")))
    minute = (float(datetime.datetime.now().strftime("%M")))
    seconde = (float(datetime.datetime.now().strftime("%S")))

    return
#----------------------------------------------------- questions année
def question_a() :
    global année
    
    année = input(" Veuillez entrer l'année souhaitée ? ")
    try :
        année = int(année)
    except :
        print()
        print(" Vous devez taper uniquement des chiffres, rien d'autre")
        question_a() # tourniquet pour chiffre non conforme
        print()
    
    if année <= 1583 or année > 9999 :
        print()
        print("    minimum 1583 maximum 9999")
        question_a() # tourniquet pour chiffre non conforme 
    bissex()
    return
#----------------------------------------------------- questions mois
def question_m() :
    global mois
    global njr_mois
    
    mois = input("            Entrer le chiffre du mois ")
    try :
        mois = int(mois)
    except :
        print()
        print(" Vous devez taper uniquement des chiffres, rien d'autre")
        question_m() # tourniquet pour chiffre non conforme
        
    if mois == 1 or mois == 3 or mois == 5 or mois == 7 or mois == 8 or mois == 10 or mois == 12 :
        njr_mois = 31
        
    if mois == 4 or mois == 6 or mois == 9 or mois == 11 :
        njr_mois = 30
        
    if mois == 2 :
        njr_mois = 28 + bx
        
    if mois < 1 or mois > njr_mois :
        print()
        print("       ce mois n'existe pas !")
        question_m() # tourniquet pour chiffre non conforme
    
    return
#----------------------------------------------------- questions date
def question_j() :
    global date
    
    date = input("               Entrer la date du jour ")
    try :
        date = int(date)
    except :
        print()
        print(" Vous devez taper uniquement des chiffres, rien d'autre")
        question_j() # tourniquet pour chiffre non conforme
    
        print()
    if date < 1 :
        print()
        print(" Il n'y a pas asser de jours pour le mois numéro ", mois)
        question_j() # tourniquet pour chiffre non conforme
    
    if date > njr_mois :
        print()
        print(" Il y a trop de jours pour le mois numéro ", mois)
        question_j() # tourniquet pour chiffre non conforme
    
    return
#----------------------------------------------------- heure manuelle
def hr_man() :
    global heure
    global minute
    global seconde
    
    print()
    heure = input("   Veuillez entrer l'heure souhaitée ? ")
    try :
        heure = int(heure)
    except :
        print(" Vous devez taper uniquement un chiffre, rien d'autre")
        hrmanu() # tourniquet pour chiffre non conforme
    if heure < 0 or heure > 24 :
        print(" Nombre d'heures en dehors des limite de 0 à 24 !")
        hrmanu() # tourniquet pour chiffre non conforme
#----------------------------------------------------- minutes manuelle        
    minute = input("   Les minutes si il y en a pas = 0 ? ")
    try :
        minute = int(minute)
    except :
        print(" Vous devez taper uniquement un chiffre, rien d'autre")
        hrmanu() # tourniquet pour chiffre non conforme
    if minute < 0 or minute > 60 :
        print(" Nombre des minutes en dehors des limites de 0 à 60")
        hrmanu() # tourniquet pour chiffre non conforme
#----------------------------------------------------- seconde manuelle
    seconde = input(" les secondes si il y en a pas = 0 ? ")
    try :
        seconde = float(seconde)
    except :
        print(" Vous devez taper uniquement un chiffre, rien d'autre")
        hrmanu() # tourniquet pour chiffre non conforme
    if seconde < 0 or seconde > 60 :
        print(" Nombre des secondes en dehors des limites de 0 à 60")
        hrmanu() # tourniquet pour chiffre non conforme
    
    return
#----------------------------------------------------- jour julien
def jul() :
    global année
    global mois
    global date
    global b
    global c
    global d
    global e
    global jj
    b = 0
    c = 0
    d = 0
    e = 0
    
    if mois < 3 :
        année = année - 1
        mois = mois + 12        
    b = int(année / 100)
    c = 2 - b + int(b / 4)
    d = int(365.25 * année)
    e = int(30.6001 * (mois + 1))
    jj = c + d + e + date + t
    
    return
#----------------------------------------------------- jour décimal
def j_déci() :
    global heure
    global hr
    global minute
    global min
    global seconde
    global sec
    global jd
    
    min = seconde / 60
    hr = (min + minute) / 60
    hr = (hr + heure)
    jd = hr / 24
    
    return 
#===================================================== Début de la lecture du programme
#----------------------------------------------------- déclaration des variables globales
global choix
global année
global mois
global njr_mois
global date
global heure
global hr
global minute
global min
global seconde
global sec

global b
global c
global d
global e
global t
global jj
global jd
#-----------------------------initialisation des variables
choix = 0
année = 0
mois = 0
njr_mois = 0
date = 0
heure = 0
hr = 0.0
minute = 0
min = 0.0
seconde = 0
sec = 0.0

b = 0
c = 0
d = 0
e = 0
t = 1720994.5
jj = 0.0
jd = 0.0
#----------------------------------------------------- [main]    
print()
print("Les calculs sont limités aux années de 1583 à 9999")
choisir()
print()
if choix == 1 :  # si le choix est : date système
    dt_sys()
    hr_sys()
else :
    question_a() # si le choix est : date manuelle
    question_m()
    question_j()
    hr_man()
jul()
j_déci()
jj_jd = jj + jd
#----------------------------------------------------- affichage
print()
print(" jour Julien seul : ", jj)
print()
print(" jour décimal seul : ", jd)
print()
print(" jour julien complet : ", jj_jd)
#----------------------------------------------------- Sortie
print()
print(" ----------------------")
bye = (input (" Entrer pour Sortir...!"))
