# Used in operations.
# Sample script to remove car kernels created by operation scripts.
# Use this script after terminating a train that services kernels created by operation scripts.
#
# Author: Daniel Boudreau, copyright 2015, 2024
#


import jmri

class RemoveCarKernels(jmri.jmrit.automat.AbstractAutomaton):
  def init(self):

    # used when creating kernel names
    self.regex = "_$_"

    print ('Script to remove operation created kernels starts now!')

    return

  def handle(self):

    # get the car manager
    carManager = jmri.InstanceManager.getDefault(jmri.jmrit.operations.rollingstock.cars.CarManager)
    # get the kernel manager
    kernelManager = jmri.InstanceManager.getDefault(jmri.jmrit.operations.rollingstock.cars.KernelManager)
    
    # get a list of cars
    carList = carManager.getByIdList()

    for car in carList:
        if car.getKernel() == None:
            continue
        # only delete kernels created by scripts
        if not self.regex in car.getKernel().getName():
            continue
        # only delete kernels that don't have a train assignment or final destination
        if not car.getTrain() == None or not car.getFinalDestination() == None:
            continue
        print ('Car ({}) type ({}) is part of kernel ({})'.format(car.toString(), car.getTypeName(), car.getKernel().getName()))
        # delete the kernel
        kernelManager.deleteKernel(car.getKernel().getName())

    print ('Done')
    return False              # all done, don't repeat again

RemoveCarKernels().start()          # create one of these, and start it running
