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

import original_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

parms = job_parms.typical_elis()
job_parms.write(sys.stderr, None, parms, None)

mp_jump = move_parms.make_for_jumps(parms)
mp_cont = move_parms.make_for_contours(parms)
mp_fill = move_parms.make_for_fillings(parms)

wdf = move_parms.width(mp_fill)
wdc = move_parms.width(mp_cont)

test_parms = {
    'max_slice': 1,
    'angle': 1.5708,
    'heuristic': 'original', 
    #'original', 'greedy', 'scan_line', 'alternating_scan_line', 'hotpath',
    'contours': False,
    'o': (0,0),
    'split_lines': True,
    'limit_lines': True,
    'max_lines': 1,
    'use_raster_links': True,
    'debug': False
  }
  
def test_make(partname, islice):
  sys.stderr.write("--- testing {make} ---\n")
  sys.stderr.write("partname = %s\n" % partname)
  sys.stderr.write("islice = %s\n" % islice)
  
  input_data.create_folder(partname, islice, test_parms)

  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']

  scan_line = False
  
  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
  data_fname = partname + ("_%03d" % islice) + "_data"

  if BCS != [] and BCS != None:
    plot_data.plot_input(outfolder + data_fname, OCRS, BCS, CTS, mp_cont, org)  

  input_data.describe_elis(sys.stderr, org, BCS, CTS, OCRS, number_lines, delta, maxcalls, parms)

  Q = original_path.make(sys.stderr, org, BCS, CTS, mp_jump)
 
  if Q != None:
    sol_fname = partname + ("_%03d" % islice) + "_sol"
    plot_data.plot_solution(outfolder + sol_fname, Q, tag, B, test_parms)
    sys.stderr.write("path execution time = %.3f s\n" % path.fabtime(Q))

    out_gcodename = outfolder + sol_fname + ".gcode"
    wr_gcode = open(out_gcodename, "w")
    gcode_write_elis.file_preamble(wr_gcode)
    gcode_write_elis.slice(wr_gcode, moves_list, test_parms, parms)
    gcode_write_elis.file_postamble(wr_gcode)
    close(wr_gcode)


  # ??? Validate result ???
  return
  # ----------------------------------------------------------------------
  
test_make("chain_link_2", False, 2)
test_make("chain_link_2", True, 2)
