#!/usr/bin/env python
import optparse, sys, os
from collections import namedtuple

optparser = optparse.OptionParser()
optparser.add_option("-i", dest="input", help="input multiple srt files", action='append')
optparser.add_option("-o", dest="output", help="output file")
(opts, _) = optparser.parse_args()

inputfile = opts.input

sub = namedtuple("sub", "begin, end, content")

inputcontent = []

def process(line):
    (begin, end) = line[1][:-2].strip().split(" --> ")
    content = line[2:]
    return sub(begin, end, content)

def time(rawtime):
    (hour, minute, seconds) = rawtime.strip().split(":")
    (second, milisecond) = seconds.strip().split(",")
    return int(milisecond) + 1000 * int(second) + 1000 * 60 * int(minute) + 1000 * 60 * 60 * int(hour)

def findnext(point, inputcontent):
    smallest = sys.maxint
    smallestid = 0
    for i in range(len(point)):
        if point[i] == len(inputcontent[i]):
            continue
        else:
            begintime = time(inputcontent[i][point[i]].begin)
            if begintime < smallest:
                smallest = begintime
                smallestid = i
    return smallestid

def merge(inputcontent):
    outputcontent = []
    point = [0 for i in inputcontent]
    maxpoint = [0 for i in inputcontent]
    for i in range(len(inputcontent)):
        maxpoint[i] = len(inputcontent[i])
    while point != maxpoint:
        nextid = findnext(point, inputcontent)
        outputcontent.append(inputcontent[nextid][point[nextid]])
        point[nextid] += 1
    return outputcontent

def printsub(raw, f):
    outputfile = open(f, 'w')
    for i in range(len(raw)):
        outputfile.write("%d\r\n" % (i+1))
        outputfile.write("%s --> %s \r\n" % (raw[i].begin, raw[i].end))
        for c in raw[i].content:
            outputfile.write("%s"%c)
        outputfile.write("\r\n")

for f in inputfile:
    line = []
    content = []
    for l in open(f):
        if l == "\r\n":
            content.append(process(line))
            line = []
        else:
            line.append(l)
    if line:
        content.append(process(line))
    inputcontent.append(content)

outputraw = merge(inputcontent)
printsub(outputraw, opts.output)