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();
    }
    
}
