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

##############################################################################
#
# Gestion scolarite IUT
#
# Copyright (c) 1999 - 2021 Emmanuel Viennet.  All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#   Emmanuel Viennet      emmanuel.viennet@viennet.net
#
##############################################################################

"""Converti fichier CSV decrivant regles parcours DUT
en "regles" python.

CSV: utf-8/Euro, tab, no text delimiter
(le faire avec OpenOffice ou NeoOffice...)

"""
import sys, pdb

sourcefile = sys.argv[1]  # fichier CSV

ALL = "ALL"

HEAD = """# -*- coding: utf-8 -*-
#
# Generated by csv2rules.py    *** DO NOT EDIT ***
#
# Command: %s %s
# 
from sco_codes_parcours import (
    DUTRule,
    ADC,
    ADJ,
    ADM,
    AJ,
    ALL,
    ATB,
    ATJ,
    ATT,
    CMP,
    NAR,
    NEXT,
    RA_OR_NEXT,
    RA_OR_RS,
    RAT,
    REO,
    REDOANNEE,
    REDOSEM,
    RS_OR_NEXT,
)

rules_source_file='%s'

""" % (
    sys.argv[0],
    sys.argv[1],
    sourcefile,
)

import sco_utils as scu


def _fmt(s):
    if not s:
        return None
    if scu.strlower(s) in ("ok", "oui", "o", "y", "yes"):
        return True
    if scu.strlower(s) in ("no", "non"):
        return False
    if s == "*":
        return ALL
    return s


colidx_code_sem = 7  # index colonne 'code_sem' dans feuille CSV
iue = colidx_code_sem + 1
icodeprev = 1  # idex col "Prev"


def genrules(csv):
    r = []
    linenum = 1
    try:
        for line in csv:
            line = line.strip()
            if line:
                if line[0] == "#":
                    r.append(line)
                else:
                    fs = [_fmt(s) for s in line.split("\t")]
                    if not "," in fs[icodeprev]:
                        fs[icodeprev] = fs[icodeprev] + ","  # liste codes prev
                    if fs[iue] and not "," in fs[iue]:
                        fs[iue] = fs[iue] + ","  # liste codes UE
                    if fs[iue]:
                        fs[iue] = "(" + fs[iue] + ")"
                    else:
                        fs[iue] = "()"
                    fs[-1] = "'" + fs[-1].replace("'", "\\'") + "'"
                    r.append(
                        "( '%s', ((%s), %s, %s, %s, %s, %s),"
                        % tuple(fs[:colidx_code_sem])
                    )
                    r.append(
                        "  (%s, %s, %s, %s, %s, %s) )," % tuple(fs[colidx_code_sem:])
                    )
            linenum += 1
    except:
        sys.stderr.write("error line %d on\n%s\n" % (linenum, csv[linenum]))
        raise
    return (
        HEAD
        + "DUTRules = [ DUTRule(rid, p, c) for (rid, p,c) in (\n"
        + "\n".join(r)
        + "\n)]"
    )


print(genrules(open(sourcefile).readlines()))
