package arabi.tools.arwiki.welcome;

import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;

import arabi.tools.arwiki.tags.TagsProcessing;
import arabi.tools.arwiki.text.ArticleProcessing;
import arabi.tools.arwiki.text.WikiLang;

public class ArWikipediaToolsTester {

	public static void main(String[] args) throws IOException, ParseException {
	
		//example1();
		//example2();
		//example3();
		//example4();
		//example5();
		//example6();
		//example7();
		//example8();
		//example9();
		//example10();

	}

	//مثال ١: قطعة برمجية تعمل على ارجاع معلومات مهيكلة لمقال عن "ابن الهيثم" في الويكيبيديا العربية:
	public static void example1() throws IOException, ParseException {
	
		// تحديد عنوان المقال المراد سحب بيانات مهيكلة منه
		String article_title= "ابن الهيثم";
			
		// بناء كائن من نوع تحليل المقالات يحمل العنوان المُدخل سابقاً
		ArticleProcessing ap = new ArticleProcessing(article_title);
			
		// مناداة القطعة البرمجية التي تسحب وتبني بيانات مهيكلة وتخزين الناتج في كائن من نوع نص
		String struct_data = ap.getStructuredReport();
			
		// طباعة النتيجة على الشاشة 
		System.out.println(struct_data);
			
		// تخزين البيانات في كائن من نوع جايسون
		//JSONObject jsonVersion = new JSONObject(struct_data);
			
		//افعل ما يحلو لك في البيانات 
		
	}
	
	//مثال ٢: قطعة برمجية تعمل على ايجاد عنوان مقال باسم "جامعة بيرزيت" في لغات اخرى في الويكيبيديا
	public static void example2() throws IOException, ParseException {
		
		// تحديد عنوان المقال المراد استخراج عنوانه بلغات اخرى في الويكيبيديا
		String article_title= "جامعة بيرزيت";
			
		// بناء كائن من نوع تحليل المقالات يحمل العنوان المُدخل سابقاً
		ArticleProcessing ap = new ArticleProcessing(article_title);
			
		// مناداة العملية البرمجية التي تستخرج عنوان المقال بلغات اخرى و تخزين الناتج في كائن من نوع لغات ويكيبيديا
		ArrayList<WikiLang> titles = ap.getArticleTitleInDiffrentLanguages();
			
		// طباعة قائمة في النتائج على شكل رمز اللغة و العنوان بتلك اللغة
		for (WikiLang title : titles) {		
		System.out.println(title.getLang_code() +" : "+title.getArticle_name_in_lang());	
		}
	}

    //مثال ٣: قطعة برمجية تستقبل عنوان مقال باللغة العربية وتعيد التصنيفات في ذلك المقال، مثال : بلاد الشام
	public static void example3() throws IOException {
		// تحديد عنوان المقال المراد استخراج عنوانه بلغات اخرى في الويكيبيديا
		String article_title= "بلاد الشام";
			
		// بناء كائن من نوع تحليل المقالات يحمل العنوان المُدخل سابقاً
		ArticleProcessing ap = new ArticleProcessing(article_title);
			
		// مناداة العملية البرمجية التي تستخرج التصنيفات من المقال المُدخل
		ArrayList<String> titles = ap.getTags();
			
		// طباعة النتائج
		System.out.println(titles);
	}

	//مثال ٤: القطعة البرمجية التالية تعيد المقالات تحت تصنيف الفيزياء
	public static void example4() throws IOException {
		//تحديد التصنيف المراد ايجاد المقالات التي تحتويه
		String tag = "فيزياء";
				
		// بناء كائن من نوع تحليل التصنيفات يحمل التصنيف المُدخل سابقاً
		TagsProcessing tp = new TagsProcessing(tag);
				
		// مناداة العملية التي تعمل على ارجاع المقالات ضمن تصنيف معين وتخزن النتيجة في قائمة
		ArrayList<String> res = tp.getArticlesWithinATag();
				
		// طباعة النتيجة
		System.out.println(res);
	}

	//مثال ٥: قطعة البرنامج التالية تعيد التصنيفات ذات العلاقة مع تصنيف كيمياء
	public static void example5() throws IOException {
		//تحديد التصنيف المراد ايجاد المقالات التي تحتويه
		String tag = "كيمياء";
				
		// بناء كائن من نوع تحليل التصنيفات يحمل التصنيف المُدخل سابقاً
		TagsProcessing tp = new TagsProcessing(tag);
				
		// مناداة العملية التي تعمل على ارجاع التصنيفات المترابطة
		ArrayList<String> res = tp.getConnectedTags();
				
		// طباعة النتيجة
		System.out.println(res);
	}

	//مثال ٦: قطعة برنامج تعيد العناوين المرتبطة بتصنيف اللغة العربية 
	public static void example6() throws IOException {
		//تحديد التصنيف المراد ايجاد المقالات التي تحتويه
		String tag = "اللغة العربية";
				
		// بناء كائن من نوع تحليل التصنيفات يحمل التصنيف المُدخل سابقاً
		TagsProcessing tp = new TagsProcessing(tag);
				
		// مناداة العملية التي تعمل على ارجاع المقالات ، يجب تجديد عمق البحث 
		//  عمق البحث هو الرقم المُدخل في العملية المذكورة والهدف منه تحديد كمية النصنيفات المراد سحب العناوين منها 
		ArrayList<String> res = tp.getArticlesWithInConnectedTags(4);
				
		// طباعة النتيجة
		System.out.println(res);
	}

	//مثال ٧: قطعة البرنامج التالية تعمل على سحب النصوص من مقال بعنوان "الخوارزمي" في الويكيبيديا العربية
	public static void example7() throws IOException {
		// تحديد عنوان المقال المراد استخراج النص العربي منه
		String article_title= "الخوارزمي";
			
		// بناء كائن من نوع تحليل المقالات يحمل العنوان المُدخل سابقاً
		ArticleProcessing ap = new ArticleProcessing(article_title);
			
		// مناداة العملية البرمجية التي تستخرج النص العربي من المقال المُدخل
		String content  = ap.getArabicPlainText();
			
		// طباعة النتائج
		System.out.println(content);

	}
	
	//مثال ٨: قطعة البرنامج التالية تعمل على سحب المحتوى من مقال بعنوان "الخوارزمي" في الويكيبيديا العربية
	public static void example8() throws IOException {
		// تحديد عنوان المقال المراد استخراج النص العربي منه
		String article_title= "الخوارزمي";
			
		// بناء كائن من نوع تحليل المقالات يحمل العنوان المُدخل سابقاً
		ArticleProcessing ap = new ArticleProcessing(article_title);
			
		// مناداة العملية البرمجية التي تستخرج المحتوى من المقال المُدخل
		String content  = ap.getPageContent();
			
		// طباعة النتائج
		System.out.println(content);
	}
	
	//مثال ٩: قطعة البرنامج التالية تعمل على اعادة مقال بعنوان "الخوارزمي" في الويكيبيديا العربية
	public static void example9() throws IOException {
		// تحديد عنوان المقال المراد استخراج النص العربي منه
		String article_title= "الخوارزمي";
			
		// بناء كائن من نوع تحليل المقالات يحمل العنوان المُدخل سابقاً
		ArticleProcessing ap = new ArticleProcessing(article_title);
			
		// مناداة العملية البرمجية التي تعيد المقال كامل على شكل صيغة أتش تي أم أل
		String content  = ap.getPageHTML();
			
		// طباعة النتائج
		System.out.println(content);
	}
	
	//مثال ١٠: قطعة برنامج لإيجاد قصاصة لمقال مُدخل ، مثال الميكانيكا الكلاسيكية
	public static void example10() throws IOException {
		// تحديد عنوان المقال المراد استخراج النص العربي منه
		String article_title= "الميكانيكا الكلاسيكية";
			
		// بناء كائن من نوع تحليل المقالات يحمل العنوان المُدخل سابقاً
		ArticleProcessing ap = new ArticleProcessing(article_title);
			
		// مناداة العملية البرمجية التي تعيد قصاصة معلومات عن المقال المُدخل
		String content  = ap.getSnippet();
			
		// طباعة النتائج
		System.out.println(content);
	}
	
	
}