#!/usr/bin/env python

from __future__ import print_function
import logging
from threading import Timer, Lock
import srt_tools.utils
import sys
import time

log = logging.getLogger(__name__)
output_lock = Lock()


def print_sub(sub, encoding):
    log.debug('Timer woke up to print %s', sub.content)
    output_lock.acquire()

    try:
        sys.stdout.write(sub.content + '\n\n')
    except UnicodeEncodeError:  # Python 2 fallback
        sys.stdout.write(sub.content.encode(encoding) + '\n\n')
    sys.stdout.flush()

    output_lock.release()


def schedule(subs, encoding):
    timers = set()
    log.debug('Scheduling subtitles')

    for sub in subs:
        secs = sub.start.total_seconds()
        cur_timer = Timer(secs, print_sub, [sub, encoding])
        cur_timer.name = '%s:%s' % (sub.index, secs)
        cur_timer.daemon = True
        log.debug('Adding "%s" to schedule queue', cur_timer.name)
        timers.add(cur_timer)

    for timer in timers:
        log.debug('Starting timer for "%s"', timer.name)
        timer.start()

    while any(t.is_alive() for t in timers):
        time.sleep(0.5)


def main():
    args = srt_tools.utils.basic_parser(no_output=True).parse_args()
    logging.basicConfig(level=args.log_level)
    srt_tools.utils.set_basic_args(args)
    schedule(args.input, args.encoding)


if __name__ == '__main__':
    main()
