#! /usr/bin/python3
# Test program for module {input_data}.
# Last edited on 2021-06-04 10:00:44 by jstolfi

import input_data
import block
import path
import move
import move_parms
import contact
import contact_example
import hacks
import job_parms
import plot_data

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

parms = job_parms.typical_elis()
parms['solid_raster_width'] = 3.0 # For "chain_link_2" example.

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)

def do_plot_data(fprefix, OCRS, OPHS, CTS, Z, angle, alter):
  xdir = (cos(angle), sin(angle)); ydir = (-xdir[1],+xdir[0])
  
  initial = "single"
  split = True
  maxlines = 0
  BCS = input_data.create_blocks(OPHS, mp_jump, xdir, ydir, OCRS, initial, split, maxlines, alter)
  
  org = (0,0)
  plot_data.plot_input(fprefix, OCRS, BCS, CTS, mp_cont, org)  
  return
  # ----------------------------------------------------------------------

def test_read(partname, islice, angle):

  sys.stderr.write("--- testing {read} ---\n")

  sys.stderr.write("partname =  %s\n" % partname)
  sys.stderr.write("islice =  %s\n" % islice)
  sys.stderr.write("angle =  %s\n" % angle)

  slicename = partname + ("_%03d" % islice)
  
  infolder = "tests/in/2021-05-15-elis/" + partname + "/"
  fname_txt = infolder + slicename + ".txt"

  OCRS, OPHS, CTS, Z = input_data.read_txt(fname_txt, mp_cont, mp_fill, angle)

  outfolder = "tests/out/"
  tag = "read"
  fprefix = outfolder + "input_data_TST_" + tag + "_" + slicename
  alter = True
  do_plot_data(fprefix, OCRS, OPHS, CTS, Z, angle, alter)

  # ??? Should validate results ???
  return
  # ----------------------------------------------------------------------

def test_synthetic(dsname, variant):

  sys.stderr.write("--- testing {make_synthetic} ---\n")

  sys.stderr.write("dsname =  %s\n" % dsname)
  sys.stderr.write("variant =  %s\n" % variant)

  slicename = dsname + "_" + variant
  
  OCRS, OPHS, CTS, Z = input_data.make_synthetic(dsname, variant, mp_cont, mp_fill)
  
  outfolder = "tests/out/"
  tag = "synth"
  fprefix = outfolder + "input_data_TST_" + tag + "_" + slicename
  angle = 0
  alter = True
  do_plot_data(fprefix, OCRS, OPHS, CTS, Z, angle, alter)

  return
  # ----------------------------------------------------------------------

def test_create_blocks(partname, split,  max_lines, alter):

  sys.stderr.write("--- testing {create_blocks} ---\n" % alter)

  sys.stderr.write("partname =  %s\n" % partname)
  sys.stderr.write("islice =  %s\n" % islice)

  islice = 2
  angle = pi/2
  single = False
  by_contours = True

  tag = partname \
    + ("_%03d" % islice) \
    + ("_split%s" % ("FT"[split])) \
    + ("_maxln%03d" % max_lines ) \
    + ("_alter%s" % ("FT"[alter]))

  infolder = "tests/in/2021-05-15-elis/" + partname + "/"

  outfolder = "tests/out/"
  outfile = "input_data_TST_" + tag

  org = (0,0)
  
  OCRS, BCS, CTS, Z = \
    input_data.read_txt \
      ( mp_cont, mp_fill, mp_jump, 
        infolder, partname, islice, angle,
        single, by_contours, split, max_lines, alter
      )

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

  # ??? Should validate results ???
  return
  # ----------------------------------------------------------------------

# test_synthetic(dsname = "patch_array", variant = "2x1x27is")
# test_synthetic(dsname = "patch_array", variant = "3x1x27no")

test_read("chain_link_2", 2, pi/2)

# for split in True, False:
#   for max_lines in 0, 3: 
#     for alter in False, True:
#       test_read("chain_link_2", split,  max_lines, alter)
 
