from __future__ import print_function
import io
from IPython.nbformat import current
import sys

def remove_formatting(nb):
    w = nb['worksheets']
    node = w[0]
    c = node['cells']
    for i in range (len(c)):
        if 'input' in c[i].keys():
            if c[i]['input'][0:16] == '#format the book':
                del c[i]
                return

def remove_links(nb):
    w = nb['worksheets']
    node = w[0]
    c = node['cells']
    for i in range (len(c)):
        if 'source' in c[i].keys():
            if c[i]['source'][0:19] == '[Table of Contents]':
                del c[i]
                return

def merge_notebooks(filenames):
    merged = None
    for fname in filenames:
        with io.open(fname, 'r', encoding='utf-8') as f:
            nb = current.read(f, u'json')
            remove_formatting(nb)
            remove_links(nb)
        if merged is None:
            merged = nb
        else:
            merged.worksheets[0].cells.extend(nb.worksheets[0].cells)
    merged.metadata.name += "_merged"

    print(current.writes(merged, u'json'))


if __name__ == '__main__':
    #merge_notebooks(sys.argv[1:])
    merge_notebooks(
        ['Preface.ipynb',
         '01_gh_filter/g-h_filter.ipynb',
         '02_Discrete_Bayes/discrete_bayes.ipynb',
         '03_Least_Squares/Least_Squares_Filters.ipynb',
         '04_Gaussians/Gaussians.ipynb',
         '05_Kalman_Filters/Kalman_Filters.ipynb',
         '06_Multivariate_Kalman_filter/Multivariate_Kalman_Filters.ipynb',
         '07_Kalman_Filter_Math/Kalman_Filter_Math.ipynb',
         '08_Designing_Kalman_Filters/Designing_Kalman_Filters.ipynb',
         '09_Extended_Kalman_Filters/Extended_Kalman_Filters.ipynb',
         '10_Unscented_Kalman_Filters/Unscented_Kalman_Filter.ipynb',
         '11_Ensemble_Kalman_Filter/Ensemble_Kalman_Filters.ipynb',
         '12_Designing_Nonlinear_Kalman_Filters/Designing_Nonlinear_Kalman_Filters.ipynb',
         '13_HInfinity_Filters/HInfinity_Filters.ipynb',
         '14_Smoothing/Smoothing.ipynb',
         'Appendix_A_Installation/Appendix_Installation.ipynb',
         'Appendix_B_Symbols_and_Notations/Appendix_Symbols_and_Notations.ipynb'])
