#!/usr/bin/env python3
import sys
import re
from enum import IntEnum,auto,unique
import numpy as np
from pathlib import Path
from lib import LaTeX,formats,dfbOptions
from lib.formats import getFormatHandlers
from TexSoup import TexSoup,TexNode,TexCmd,TexEnv
from lib.data import dataFileBase,DataType,state
from collections import defaultdict
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--file', type=argparse.FileType('r'))
parser.add_argument("--list","-l",action="store_true", help='List all available format')
parser.add_argument('--debug', action='store_true', help='Debug mode')
args = parser.parse_args()
if args.list:
  print("The list of avalable formats are:")
  for formatName,_ in getFormatHandlers():
    print(formatName)
elif args.file!=None:
  lines=args.file.readlines()
  soup=TexSoup(lines)
  opt=soup.dfbOptions
  if type(opt) is TexNode and type(opt.expr) is TexEnv:
    texOps=dfbOptions.readFromEnv(opt)
  else:
    texOps=dfbOptions()
  commands=[LaTeX.newCommand(cmd) for cmd in soup.find_all("newcommand")]
  dat=LaTeX.tabularToData(soup.tabular,commands)
  scriptpath=Path(sys.argv[0]).resolve()
  datapath=scriptpath.parents[1]/"static"/"data"
  if args.debug:
    datapath=datapath/"test"
  if not datapath.exists():
    datapath.mkdir()
  datalst=dataFileBase.readFromTable(dat,texOps,commands=commands)
  for data in datalst:
    data.toFile(datapath,texOps.suffix)
else:
  parser.print_help()