#!/usr/bin/env python2
# coding: utf-8

import sys
import os

import bs4
import re

colors = {
	"default"    :    "\033[0m",
	# style
	"bold"       :    "\033[1m",
        "dim"        :    "\033[2m",
	"underline"  :    "\033[4m",
	"blink"      :    "\033[5m",
	"reverse"    :    "\033[7m",
	"concealed"  :    "\033[8m",
	# couleur texte
	"black"      :    "\033[30m", 
	"red"        :    "\033[31m",
	"green"      :    "\033[32m",
	"yellow"     :    "\033[33m",
	"blue"       :    "\033[34m",
	"magenta"    :    "\033[35m",
	"cyan"       :    "\033[36m",
	"white"      :    "\033[37m",
	# couleur fond
	"on_black"   :    "\033[40m", 
	"on_red"     :    "\033[41m",
	"on_green"   :    "\033[42m",
	"on_yellow"  :    "\033[43m",
	"on_blue"    :    "\033[44m",
	"on_magenta" :    "\033[45m",
	"on_cyan"    :    "\033[46m",
	"on_white"   :    "\033[47m" }

def colorier( text, couleur, effet = "" ):
    t = colors[ couleur ]
    if effet != "":
        t = t + colors[ effet ]
    t = t  + str( text ) + colors["default"]
    return t

def nbComptesType( soup, t ):
    cnt = 0
    for tag in soup.find_all( text=re.compile( t ) ):
        cnt += 1
    return cnt

def nbComptes( soup ):
    for tag in soup.find_all( text=re.compile( 'Identifiant' ) ):
        table = tag.findParent('table')
    return len( table ) - 1

def nbComptesExternes( soup ):
    return nbComptesType( soup, "externe" )
        
def nbComptesActifs( soup ):
    return  nbComptesType( soup, "active" )

def nbComptesActifs22( soup ):
    return  nbComptesType( soup, "active22" )

def colonnelogin( soup ):
    for tag in soup.find_all( text=re.compile( 'Identifiant' ) ):
        header = tag.findParent('tr')
    cnt = 0
    cells  = header.findChildren( 'td' )
    for c in cells:
        if c.string == "Identifiant":
            return cnt
        cnt += 1
    return -1

def comptesExpires( soup ):
    names = []
    expired = []
    for tag in soup.find_all( text=re.compile( 'expired' ) ):
        expired.append( tag.findParent('tr') )
  
    col = colonnelogin( soup )
    
    for compte in expired:
        cells = compte.findChildren( 'td' )
        names.append( cells[col].find(text=True) )
    return names

def lireFichier( fn ):
    fd = open( fn, "r+" )
    soup = bs4.BeautifulSoup( fd )

    expired = comptesExpires( soup )

    print colorier( nbComptes( soup ), "blue", "bold" ), "comptes au total"
    print colorier( nbComptesActifs( soup ), "green"  ), "comptes actifs"
    print colorier( nbComptesActifs22( soup ), "green" ), "comptes actifs 22",  colorier( "(aucune id��e de ce que c'est)", "default", "dim" )
    print colorier( nbComptesExternes( soup ), "green" ), "comptes externes"
    print colorier( len( expired ), "red", "bold" ), "comptes expir��s"
    print colorier( "La somme actifs + externes + expir��s ne fait pas le total et je ne sais pas pourquoi", "default", "dim" )

    print colorier( "Comptes expir��s :", "default", "underline" )
    print " ".join( expired )
    
    fd.close()
    return
    
def main():
    if len( sys.argv ) < 2:
        print "Fournir nom du fichier"
        exit( -1 )
        
    filename = sys.argv[1]
    lireFichier( filename )
        
    return

if "__main__" == __name__:
    main()
