/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package baseb;

import net.wikipedia.Wiki;

/**
 *
 * @author Base
 */
public class BaseB {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        Wiki wiki = new Wiki("uk.wikipedia.org");
        wiki.login("Login", "Password".toCharArray());
        wiki.setMarkBot(true);
        wiki.setMarkMinor(true);
        resP = wiki.getPageText("Користувач:BaseBot/noAccentList");
        for (int j = 0; j < 200; j++) {
            pagesWithoutAccent(wiki, wiki.random());
        }
        
        resP=replaceAll(resP, "<br/>|}}", "|}}");
        wiki.edit("Користувач:BaseBot/noAccentList", resP, "Виявлено ще одну сторінку");
        wiki.logout();
    }

    public static void pagesWithoutAccent(Wiki w, String page) throws Exception {
        w.setMarkMinor(true);
        if (page.contains("(")) {
            pageprer = page;
            pageprer = replaceAll(pageprer, " (", "犬fishкошка");
            pager = pageprer.split("犬fishкошка")[0];
        } else {
            pager = page;
        }

        System.out.println("\u005b");


        boolean hcc1 = pager.contains("А");
        boolean hcc2 = pager.contains("а");
        boolean hcc3 = pager.contains("У");
        boolean hcc4 = pager.contains("у");
        boolean hcc5 = pager.contains("Е");
        boolean hcc6 = pager.contains("О");
        boolean hcc7 = pager.contains("о");
        boolean hcc8 = pager.contains("І");
        boolean hcc9 = pager.contains("і");
        boolean hcc10 = pager.contains("и");
        boolean hcc11 = pager.contains("Я");
        boolean hcc12 = pager.contains("я");
        boolean hcc13 = pager.contains("Ю");
        boolean hcc14 = pager.contains("ю");
        boolean hcc15 = pager.contains("Є");
        boolean hcc16 = pager.contains("є");
        boolean hcc17 = pager.contains("Ї");
        boolean hcc18 = pager.contains("ї");
        manySp = 0;


        boolean hcc = hcc1 || hcc2 || hcc3 || hcc4 || hcc5 || hcc6 || hcc7 || hcc8 || hcc9 || hcc10 || hcc11 || hcc12 || hcc13 || hcc14 || hcc15 || hcc16 || hcc17 || hcc18;
        int hasOneMoreSyl = boolToInt(hcc1) + boolToInt(hcc2) + boolToInt(hcc3) + boolToInt(hcc4) + boolToInt(hcc5) + boolToInt(hcc6) + boolToInt(hcc7) + boolToInt(hcc8) + boolToInt(hcc9) + boolToInt(hcc10) + boolToInt(hcc11) + boolToInt(hcc12) + boolToInt(hcc13) + boolToInt(hcc14) + boolToInt(hcc15) + boolToInt(hcc16) + boolToInt(hcc17) + boolToInt(hcc18);

        System.out.println("hcc=" + java.lang.Boolean.toString(hcc));
        System.out.println("Складів=" + hasOneMoreSyl);
        int spaces = spCount(pager, 0);
        System.out.println("Пробілів=" + spaces);
       
        boolean cTemp = true;
        boolean iff = (hasOneMoreSyl > 1) && (spaces < hasOneMoreSyl + 2);
        hasAcc = true;
        boolean isDisambig=true;
        if (iff) {
            txt = w.getPageText(page);
            hasAcc = txt.contains("\u02C8") || txt.contains("\u0301");
            System.out.println(page + ":Наявність наголосу=" + hasAcc);
            boolean cNoImage = txt.contains("{{без наголосу");
            cTemp = txt.contains("{{");
            boolean cNoCat = txt.contains("{{Без_категорій}}") || txt.contains("{{Recat}}") || txt.contains("{{Категорія}}");
        isDisambig = cDisambig(txt);
        } else {
        }

        pageCatarr = w.getCategories(page);
        pageCat = "";
        //main work
        if (!hasAcc && (hasOneMoreSyl > 1) && (spaces < hasOneMoreSyl + 2) && (isDisambig == false)) {
            pageName = "[[" + page + "]]";

            if (pageCatarr.length > 0) {

                for (int i = 0; i < pageCatarr.length; i++) {
                    System.out.println("PageCatarr=" + pageCatarr[i]);
                    pageCat += "[[:" + pageCatarr[i] + "|" + pageCatarr[i] + "]]\n<br/>";
                }
            } else {
            }
            pageOther = "";
            if (!cTemp) {
                w.edit("User:Base/Сторінки без шаблонів", w.getPageText("User:Base/Сторінки без шаблонів") + "\n*" + page, "виявлено ще одну сторінку");
                pageOther += "Взагалі відсутні шаблони\n<br/>";
            } else {
            }
            if (!txt.contains("[[")) {
                pageOther += "Взагалі відсутні лінки\n<br/>";
            } else {
            }
            w.parse("{{}}");
            String[] split = resP.split("<!-- special fignya -->");
            resP = split[0] + "{{Користувач:BaseBot/noAccentList/рядок|" + pageName + "|" + pageCat + "|" + pageOther + "}}\n<!-- special fignya -->" + split[1];

        } else {
            System.out.println("У сторінці проставлено наголос, або він не є необхідним, або про його відсутність відомо");
            System.out.println("Зараз буде перевірено наступну сторінку");
            pagesWithoutAccent(w, w.random());
        }
    }

    public static int boolToInt(boolean bool) {
        int resInt = 0;
        if (bool) {
            resInt = 1;
        } else {
            resInt = 0;
        }
        return resInt;
    }

    public static int spCount(String s, int numSp) {
        if (s.contains(" ")) {
            numSp++;

            spCount(s.substring(s.indexOf(" "), s.length() - 1), numSp);
        } else {
        }
        return numSp;
    }

    public static boolean cDisambig(String tx) {
        if (tx.toLowerCase().contains("{{неоднозначність") || tx.toLowerCase().contains("{{surname") || tx.toLowerCase().contains("{{список однофамільців") || tx.toLowerCase().contains("{{disambig")) {
            System.out.println("Це дизамбіг");
            return true;
        } else {
            System.out.println("Це не дизамбіг");
            return false;
        }
    }

    // Перевірка наявності зображень пошук в рендомі до успішного встановлення шаблону
    public static void pagesWithoutMedia(Wiki w, String page) throws Exception {
        w.setMarkMinor(true);
        txt = w.getPageText(page);
        System.out.println("\u005b");
        txt = replaceAll(txt, "[[", "猫dogрыбка");
        boolean cPng1 = txt.contains(".Png");
        boolean cPng2 = txt.contains(".png");
        boolean cPng3 = txt.contains(".PNG");
        boolean cJpg1 = txt.contains(".Jpg");
        boolean cJpg2 = txt.contains(".jpg");
        boolean cJpg3 = txt.contains(".JPG");
        boolean cJpeg1 = txt.contains(".Jpeg");
        boolean cJpeg2 = txt.contains(".jpeg");
        boolean cJpeg3 = txt.contains(".JPEG");
        boolean cSvg1 = txt.contains(".Svg");
        boolean cSvg2 = txt.contains(".svg");
        boolean cSvg3 = txt.contains(".SVG");
        boolean cTemp = txt.contains("{{");
        boolean cNoImage = txt.contains("{{без ілюстрацій") || txt.contains("{{Noimg");
        boolean cDisambig = txt.contains("{{неоднозначність") || txt.contains("{{surname") || txt.contains("{{Список однофамільців") || txt.contains("{{Disambig");

        if (cPng2 || cPng2 || cPng3 || cJpg1 || cJpg2 || cJpg3 || cJpeg1 || cJpeg1 || cJpeg2 || cJpeg3 || cSvg1 || cSvg2 || cSvg3 || cNoImage) {
            System.out.println("Сторінка містить зображення файли");
            pagesWithoutMedia(w, w.random());
        } else {
            txt = replaceAll(txt, "猫dogрыбкаCategory", "猫dogрыбкаКатегорія");
            txt = txt.replaceFirst("猫dogрыбкаКатегорія", "redзелений白い猫dogрыбкаКатегорія");
            String[] txtA = txt.split("redзелений白い");
            txtA[1] = "\n{{Без ілюстрацій}}\n" + "" + txtA[1];
            txt = txtA[0] + txtA[1];
            txt = replaceAll(txt, "猫dogрыбка", "[[");
            w.edit(page, txt, "Виявлено відсутність ілюстрацій");
            if (!cTemp) {
                w.edit("User:Base/Сторінки без шаблонів", w.getPageText("User:Base/Сторінки без шаблонів") + "\n*" + page, "виявлено ще одну сторінку");
            } else {
            }
        }
        // кінець

    }

    public static String replaceAll(String str, String pattern, String replace) {
        int s = 0;
        int e = 0;
        StringBuffer result = new StringBuffer();
        while ((e = str.indexOf(pattern, s)) >= 0) {
            result.append(str.substring(s, e));
            result.append(replace);
            s = e + pattern.length();
        }
        result.append(str.substring(s));
        return result.toString();
    }
    //Var declaration
    public static String txt;
    public static String pager;
    public static String pageprer;
    public static int manySp;
    public static String pageName, pageCat, pageOther;
    public static String[] pageCatarr;
    public static String resP;
    public static boolean hasAcc;
}
// list=categorymembers;