#! /usr/bin/python3
# Last edited on 2021-10-02 13:56:46 by stolfi

import simple_greedy_path

import move
import move_parms
import path
import block
import block_hp
import contour
import contour_hp
import contact
import contact_hp
import job_parms
import hacks

import path_example
import input_data
import txt_read
import gcode_read_elis
import gcode_write_elis
import plot_data

import rn
import pyx
import os
import sys
import time
from math import sqrt, sin, cos, floor, ceil, inf, nan, pi

def test_make(partname, islice):

  test_parms['input_file'] = partname

  out_gcodename = outfolder + out_fname + ".gcode"
  wr_gcode = open(out_gcodename, "w")
  gcode_write_elis.file_preamble(wr_gcode)

  while(True):
    infolder = test_parms['input_folder']
    angle = test_parms['angle']
    split = test_parms['split_lines']
    max_lines = test_parms['max_lines']
    outfolder = test_parms['output_folder']
    org = test_parms['o']

    OCRS, BCS, CTS, number_lines, Z = \
      input_data.read \
        ( mp_cont, mp_fill, mp_jump, 
          infolder, partname, islice, angle,
          single, by_contours, split, max_lines, alter
        )
    test_parms['Z'] = Z
    outfile = partname + ("_%03d" % islice)
    
    B = plot_data.plot_input(outfolder + outfile, OCRS, BCS, CTS, mp_cont, org)
    if BCS == [] or BCS == None:
      break
    
    wr = open(outfile + ".txt", 'w')
    
    Q = generic_path.make(OCRS, BCS, CTS, number_lines, mp_cont, mp_jump, parms, test_parms, tag, B, wr)

    if Q != None:
      out_fname = partname + "_sol"
      plot_data.plot_solution(outfolder + out_fname, Q, tag, B, test_parms)
      gcode_write_elis.slice(wr_gcode, moves_list, test_parms, parms)
      test_parms['o'] = path.pfin(Q)
      print(path.fabtime(Q))
    
    test_parms['islice'] += 1

    if test_parms['max_slice'] != None and test_parms['islice'] > test_parms['max_slice']:
      break

  gcode_write_elis.file_postamble(wr_gcode)
  close(wr_gcode)

  ########### TEXT 

  if test_parms['max_slice'] != None:
    test_parms['max_slice'] += 1
  else:
    test_parms['max_slice'] = len(os.listdir(test_parms['input_folder'])) + 1

  out_gcodename = outfolder + out_fname + ".gcode"
  wr_gcode = open(out_gcodename, "w")
  gcode_write_elis.file_preamble(wr_gcode)

  for test_parms['islice'] in range(test_parms['islice'], test_parms['max_slice'], 1):
    test_parms['input_file'] = partname + '_' + str(test_parms['islice']) + '.txt'

    infolder = test_parms['input_folder']
    angle = test_parms['angle']
    split = test_parms['split_lines']
    max_lines = test_parms['max_lines']
    outfolder = test_parms['output_folder']
    org = test_parms['o']

    OCRS, BCS, CTS, number_lines, Z = \
      input_data.read \
        ( mp_cont, mp_fill, mp_jump, 
          infolder, partname, islice, angle,
          single, by_contours, split, max_lines, alter
        )
    test_parms['Z'] = Z
    outfile = partname + ("_%03d" % islice)
    test_parms['output_file'] = outfile

    B = plot_data.plot_input(outfolder + outfile, OCRS, BCS, CTS, mp_cont, org) 
    sys.stdout = open(outfile + ".txt", 'w')

    Q = generic_path.make(OCRS, BCS, CTS, number_lines, mp_cont, mp_jump, parms, test_parms, tag, B, sys.stdout)

    if Q != None:
      out_fname = partname + "_sol"
      plot_data.plot_solution(outfolder + out_fname, Q, tag, B, test_parms)
      gcode_write_elis.slice(wr_gcode, moves_list, test_parms, parms)
      test_parms['o'] = path.pfin(Q)
      print(path.fabtime(Q))

  gcode_write_elis.file_postamble(wr_gcode)
  close(wr_gcode)

  return



test_parms = {
    'input_file': "52mm_wrench",   # sys.argv[1],
    'output_file': '',
    'output_folder': '',
    'islice': 1,
    'max_slice': 1,
    'angle': 1.5708,
    'heuristic': 'hotpath', 
    #'original', 'greedy', 'scan_line', 'alternating_scan_line', 'hotpath',
    'contours': False,
    'Z': 0,
    'o': (0,0),
    'delta': 17,
    'max_calls': 0,
    'split_lines': True,
    'limit_lines': True,
    'max_lines': 1,
    'use_raster_links': True,
    'debug': False
  }

parms = job_parms.typical_elis()

input_data.create_folder(test_parms)

test_make(test_parms, parms)
