package dareka.processor.impl;

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import dareka.extensions.Rewriter;
import dareka.processor.HttpResponseHeader;

// [nl] watchページ書き換え
public class WatchRewriter implements Rewriter {

	// Rewriter interface
	private static final Pattern WATCH_PAGE_PATTERN = Pattern.compile(
			"^http://(?:www|flapi)\\.nicovideo\\.jp/watch/([a-z]{2})?(\\d+)" +
			"(|\\?.+|/videoExplorer)$");
	
	// 処理するURLの正規表現
	public Pattern getRewriterSupportedURLAsPattern() {
		return WATCH_PAGE_PATTERN;
	}
	
	public String onMatch(Matcher match, HttpResponseHeader responseHeader, String content)
			throws IOException {
		String type = match.group(1);
		String id   = match.group(2);
		
		//
		// WatchVars を生成してキャッシュする
		// これ以降の Rewriter はキャッシュした WatchVars を利用できる
		//
		WatchVars vars = WatchVars.get(content);
		
		// スレッドIDの場合は動画IDとの対応も記録する
		if (type == null && vars.getVideoId() != null) {
			NLShared.INSTANCE.putThread2Smid(id, vars.getVideoId());
		}
		
		if (Boolean.getBoolean("disableWatchRewriter")) {
			return content;
		}
		
		// GINZA: flvInfoがある(=getflvを発行しない)ケースに対応
		vars.replaceFlvInfo(match.group());
        // HTML5
        vars.replaceDataApiData(match.group());
		
		return vars.getReplacedContent();
	}
	
}
