Import("env")

# Write project builders for re-use in task definitions
abaqus_journal = Builder(
    action=[
        (
            "cd ${TARGET.dir.abspath} && ${abaqus_program} cae -noGui ${SOURCE.abspath} ${abaqus_options} "
            "-- ${journal_options}"
        )
    ]
)

abaqus_solver = Builder(
    action=[
        (
            "cd ${TARGET.dir.abspath} && ${abaqus_program} -job ${job} -input ${SOURCE.filebase} "
            "${abaqus_options} -interactive -ask_delete no"
        )
    ]
)

# Add builders and pseudo-builders
env.Append(
    BUILDERS={
        "AbaqusJournal": abaqus_journal,
        "AbaqusSolver": abaqus_solver,
    }
)

# Geometry
env.AbaqusJournal(
    target=["rectangle_geometry.cae"],
    source=["rectangle_geometry.py"],
    abaqus_program=env["ABAQUS_PROGRAM"],
)

# Partition
env.AbaqusJournal(
    target=["rectangle_partition.cae"],
    source=["rectangle_partition.py", "rectangle_geometry.cae"],
    abaqus_program=env["ABAQUS_PROGRAM"],
)

# Mesh
env.AbaqusJournal(
    target=["rectangle_mesh.inp", "rectangle_mesh.cae"],
    source=["rectangle_mesh.py", "rectangle_partition.cae", "abaqus_utilities.py"],
    abaqus_program=env["ABAQUS_PROGRAM"],
)

# Abaqus Solve
solve_sources = [
    "rectangle_compression.inp",
    "rectangle_mesh.inp",
]

solve_targets = [
    "rectangle_compression.odb",
    "rectangle_compression.dat",
    "rectangle_compression.msg",
    "rectangle_compression.com",
    "rectangle_compression.prt",
    "rectangle_compression.sta",
]

target = env.AbaqusSolver(
    target=solve_targets,
    source=solve_sources,
    abaqus_program=env["ABAQUS_PROGRAM"],
    job="rectangle_compression",
    program_options="-double both",
)

# Collector alias named after the model simulation
env.Alias("rectangle", target)

if not env["unconditional_build"] and not env["ABAQUS_PROGRAM"]:
    print(f"Program 'abaqus' was not found in construction environment. Ignoring 'rectangle' target(s)")
    Ignore([".", "rectangle"], target)
