package page.image;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Locale;

import javax.imageio.ImageIO;

import org.wikiwebserver.core.WareHouse;
import org.wikiwebserver.handler.http.FormData;
import org.wikiwebserver.handler.http.interfaces.*;
import org.wikiwebserver.util.CacheableDynamicImage;

import page.tools.entity.User;

public class UserAvatar extends CacheableDynamicImage implements HTTPResponder {
    
    private String avatar = avatars[(int)(Math.random()*avatars.length)];
    private String flag = flags[(int)(Math.random()*avatars.length)];
	
    protected void init(FormData formData) {
        
        setSize(56, 56);
        
        if (formData == null) return;
        
        String userID = formData.getFirst("userID");
        if (userID == null) return;
    
    
        int code = userID.hashCode();
        if (code<0) code *= -1;
        avatar = avatars[code % avatars.length];
        
        User u = User.getUserById(userID);
        if (u != null) {
            String country = (String) u.get("country");
            if (country == null || country.length() == 0) {
                country = (String) u.get("lastRequestCountry");                    
            }

            if (country == null || country.length() == 0 ||
                country.equalsIgnoreCase("Unknown")) {
                
                country = "UNITED KINGDOM";
            }
            
            Locale[] locales = Locale.getAvailableLocales();
            for (int i = 0; i < locales.length; i++) {
                String countryName = locales[i].getDisplayCountry();
                if (countryName != null && countryName.length() > 0) {
                    if (countryName.equalsIgnoreCase(country)) {                        
                        String reqFlag = locales[i].getCountry().toLowerCase() + ".gif";                            
                        for (int j=0; j<flags.length; j++) {
                            if (flags[j].equals(reqFlag)) {
                                flag = flags[j];
                                return;
                            }
                        }
                    }
                }
            }
        }
        
    }
    
    protected void paint(Graphics2D g2d) throws IOException {
        
        File avatarFile = WareHouse.getResourceFile(avatarRoot + avatar);
        BufferedImage avatarImage = ImageIO.read(avatarFile);
        File flagFile = WareHouse.getResourceFile(flagRoot + flag);
        BufferedImage flagImage = ImageIO.read(flagFile);        

        
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);        
        g2d.setColor(Color.white);
        g2d.fillRect(0, 0, getWidth(), getHeight());
        
        g2d.drawImage(avatarImage, 0, 0, null);
        g2d.drawImage(flagImage, getWidth()-flagImage.getWidth(), 
                      getHeight()-flagImage.getHeight(), null);
    }     
    
    private static final String avatarRoot = "templates/default/icons/avatars/";
    private static final String flagRoot = "templates/default/icons/flags/";
    
    private static final String[] avatars = {
        "BigEyes_Creature _48x48.png", "BlackCreature_48x48.png", 
        "BlackPower_creature_48x48.png", "black_creature_48x48.png", 
        "blue_creature_48x48.png", "brown_creature_48x48.png", 
        "CheeksCreature_48x48.png", "ChinaCreature_48x48.png", 
        "DomokunCreature_48x48.png", "Dragon_creature_48x48.png", 
        "EarsCreature_48x48.png", "fire_creature_48x48.png", 
        "GlassesCreature_48x48.png", "green_creature_48x48.png", 
        "green_red_eyes_48x48.png", "Lady_Yellow_Creature_48x48.png", 
        "NoseCreature_48x48.png", "orange_creature_48x48.png", 
        "pink_creature_48x48.png", "PirateCreature_48x48.png", 
        "red_creature _48x48.png", "Red_creature_48x48.png", 
        "red_eyes_creature_48x48.png", "ScarCreature_48x48.png", 
        "SmileCreature_48x48.png", "swamp_creature_48x48.png", 
        "Tentacles_creature_48x48.png", "tie_creature_48x48.png", 
        "white_creature_48x48.png"
    };

    private static final String[] flags = {
        "ad.gif", "ae.gif",  "af.gif",  "ag.gif",  "ai.gif",  "al.gif",  "am.gif",  
        "an.gif",  "ao.gif",  "ar.gif",  "as.gif",  "at.gif",  "au.gif",  "aw.gif",  
        "ax.gif",  "az.gif",  "ba.gif",  "bb.gif",  "bd.gif",  "be.gif",  "bf.gif",  
        "bg.gif",  "bh.gif",  "bi.gif",  "bj.gif",  "bm.gif",  "bn.gif",  "bo.gif",  
        "br.gif",  "bs.gif",  "bt.gif",  "bv.gif",  "bw.gif",  "by.gif",  "bz.gif",  
        "ca.gif",  "catalonia.gif",  "cc.gif",  "cd.gif",  "cf.gif",  "cg.gif",  "ch.gif",  
        "ci.gif",  "ck.gif",  "cl.gif",  "cm.gif",  "cn.gif",  "co.gif",  "cr.gif",  
        "cs.gif",  "cu.gif",  "cv.gif",  "cx.gif",  "cy.gif",  "cz.gif",  "de.gif",  
        "dj.gif",  "dk.gif",  "dm.gif",  "do.gif",  "dz.gif",  "ec.gif",  "ee.gif",  
        "eg.gif",  "eh.gif",  "england.gif",  "er.gif",  "es.gif",  "et.gif",  
        "europeanunion.gif",  "fam.gif",  "fi.gif",  "fj.gif",  "fk.gif",  "fm.gif",  
        "fo.gif",  "fr.gif",  "ga.gif",  "gb.gif",  "gd.gif",  "ge.gif",  "gf.gif",  
        "gh.gif",  "gi.gif",  "gl.gif",  "gm.gif",  "gn.gif",  "gp.gif",  "gq.gif",  
        "gr.gif",  "gs.gif",  "gt.gif",  "gu.gif",  "gw.gif",  "gy.gif",  "hk.gif",  
        "hm.gif",  "hn.gif",  "hr.gif",  "ht.gif",  "hu.gif",  "id.gif",  "ie.gif",  
        "il.gif",  "in.gif",  "io.gif",  "iq.gif",  "ir.gif",  "is.gif",  "it.gif",  
        "jm.gif",  "jo.gif",  "jp.gif",  "ke.gif",  "kg.gif",  "kh.gif",  "ki.gif",  
        "km.gif",  "kn.gif",  "kp.gif",  "kr.gif",  "kw.gif",  "ky.gif",  "kz.gif",  
        "la.gif",  "lb.gif",  "lc.gif",  "li.gif",  "lk.gif",  "lr.gif",  "ls.gif",  
        "lt.gif",  "lu.gif",  "lv.gif",  "ly.gif",  "ma.gif",  "mc.gif",  "md.gif",  
        "me.gif",  "mg.gif",  "mh.gif",  "mk.gif",  "ml.gif",  "mm.gif",  "mn.gif",  
        "mo.gif",  "mp.gif",  "mq.gif",  "mr.gif",  "ms.gif",  "mt.gif",  "mu.gif",  
        "mv.gif",  "mw.gif",  "mx.gif",  "my.gif",  "mz.gif",  "na.gif",  "nc.gif",  
        "ne.gif",  "nf.gif",  "ng.gif",  "ni.gif",  "nl.gif",  "no.gif",  "np.gif",  
        "nr.gif",  "nu.gif",  "nz.gif",  "om.gif",  "pa.gif",  "pe.gif",  "pf.gif",  
        "pg.gif",  "ph.gif",  "pk.gif",  "pl.gif",  "pm.gif",  "pn.gif",  "pr.gif",  
        "ps.gif",  "pt.gif",  "pw.gif",  "py.gif",  "qa.gif",  "re.gif",  "ro.gif",  
        "rs.gif",  "ru.gif",  "rw.gif",  "sa.gif",  "sb.gif",  "sc.gif",  "scotland.gif",  
        "sd.gif",  "se.gif",  "sg.gif",  "sh.gif",  "si.gif",  "sj.gif",  "sk.gif",  
        "sl.gif",  "sm.gif",  "sn.gif",  "so.gif",  "sr.gif",  "st.gif",  "sv.gif",  
        "sy.gif",  "sz.gif",  "tc.gif",  "td.gif",  "tf.gif",  "tg.gif",  "th.gif",  
        "tj.gif",  "tk.gif",  "tl.gif",  "tm.gif",  "tn.gif",  "to.gif",  "tr.gif",  
        "tt.gif",  "tv.gif",  "tw.gif",  "tz.gif",  "ua.gif",  "ug.gif",  "um.gif",  
        "us.gif",  "uy.gif",  "uz.gif",  "va.gif",  "vc.gif",  "ve.gif",  "vg.gif",  
        "vi.gif",  "vn.gif",  "vu.gif",  "wales.gif",  "wf.gif",  "ws.gif",  "ye.gif",  
        "yt.gif",  "za.gif",  "zm.gif",  "zw.gif", 
    };
        
}
