package org.sillyjirafe.linker;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.sillyjirafe.db.Crawl_StateDB;
import org.sillyjirafe.db.ElementsDB;
import org.sillyjirafe.json.ApiKeys;
import org.sillyjirafe.uoapi.*;

public class Main {
	public static void main(String[] args) throws Exception
	{
		Out Out = new Out();
		ElementsDB elementDB = new ElementsDB("jdbc:sqlite:elements.db");
		Crawl_StateDB crawlstateDB = new Crawl_StateDB("jdbc:sqlite:crawlstates.db");
		elementDB.LinkToDB();
		crawlstateDB.LinkToDB();
		
		Map<String, Boolean> succes = Out.getSucces();
		
        List<String> bindNames = Out.PreOut();

        Map<String, Integer> pages = new HashMap<>();
        for (String name : bindNames) {
            pages.put(name, crawlstateDB.getPage(name));
        }
        
        Map<String, String> rnds = new HashMap<>();
        for (String nom : bindNames) {
            rnds.put(nom, crawlstateDB.getRND(nom));
        }
		
        
		List<element> elements = Out.out(pages, ApiKeys.read(), rnds);
		
		for (int i = 0; i < elements.size(); i++)
		{
			element el = elements.get(i);
			elementDB.AddEllement(el.title(), el.url(), el.licence(), el.source(), el.type());
		}
		
		for (String name : bindNames) {
			if (succes.getOrDefault(name, false)) {
		        crawlstateDB.updatePage(name);
		    } else {
		        crawlstateDB.incrementError(name);   // échec, compte une erreur de plus
		    }
        }
		
		elementDB.Close();
		crawlstateDB.Close();
	}
}
