from server import *
import os.path
from jobtypes import schedule_remux, schedule_transcode

@app.route('/internal/jobs/add/remux', methods=['GET', 'POST'])
@mod_required
@csrf_protect
def add_remux_job():
	lectureid = request.values.get('lectureid')
	videoid = int(request.values.get('videoid', 0))
	if not lectureid:
		lectureid = query('SELECT lecture_id FROM videos WHERE id = ?', videoid)[0]['lecture_id']
	schedule_remux(lectureid, videoid)
	return redirect(request.values.get('ref', url_for('jobs_overview')))

@app.route('/internal/jobs/add/reencode', methods=['GET', 'POST'])
@mod_required
@csrf_protect
@handle_errors('jobs_overview', 'Video nicht gefunden!', 404, IndexError)
def add_reencode_job():
	video = query('SELECT * FROM videos WHERE id = ?', request.values['videoid'])[0]
	if not video['source']:
		flash('Manuell erstellte Videos können nicht neukodiert werden!')
	else:
		source = query('''SELECT sources.* FROM sources WHERE sources.id = ? ORDER BY time_created''', video['source'])[-1]
		schedule_transcode(source, video=video)
	return redirect(request.values.get('ref', url_for('jobs_overview')))

@job_handler('probe-raw')
def update_lecture_videos(jobid, jobtype, data, state, status):
	if 'lecture_id' not in data:
		return
	if 'source_id' not in data:
		modify('INSERT INTO sources (lecture_id, path, type, hash, time_created) VALUES (?, ?, ?, ?, ?)',
				data['lecture_id'], data['path'], 'plain', status['hash'], datetime.now())
	sources = query('SELECT * FROM sources WHERE sources.lecture_id = ? ORDER BY time_created', data['lecture_id'])
	if not sources:
		return
	latest = sources[-1]
	videos = query('SELECT * FROM videos WHERE videos.lecture_id = ?', data['lecture_id'])
	current_fmts = [v['video_format'] for v in videos]
	formats = query('''SELECT formats.* FROM formats
			JOIN profiles ON formats.id = profiles.format
			JOIN courses ON profiles.name = courses.profile
			JOIN lectures ON courses.id = lectures.course_id
			WHERE lectures.id = ?''', data['lecture_id'])
	for fmt in formats:
		if fmt['id'] not in current_fmts:
			schedule_transcode(latest, fmt_id=fmt['id'])
	for video in videos:
		if video['source'] != latest['id']:
			schedule_transcode(latest, video=video)

@edit_handler('chapters')
def chapter_changed(table, column, value, id, user):
	chapters = query('SELECT * FROM chapters WHERE id = ?', id)
	if not chapters:
		return
	chapter = chapters[0]
	if column in ['visible', 'deleted'] or (chapter['visible'] and not chapter['deleted']):
		schedule_remux(chapter['lecture_id'])

@edit_handler('courses')
def course_changed(table, column, value, id, user):
	if column not in ['title', 'organizer']:
		return
	lectures = query('SELECT * FROM lectures WHERE course_id = ?', id)
	for lecture in lectures:
		schedule_remux(lecture['id'])

@edit_handler('lectures')
def lecture_changed(table, column, value, id, user):
	if column in ['title', 'comment', 'time', 'speaker']:
		schedule_remux(id)