package Manager;

import java.sql.*;
import Database.DatabaseClient;
import Encoding.vl64;

public class Catalogo {

    public DatabaseClient DB;
    public Catalogo(DatabaseClient db)
    {
        this.DB = db;
    }
    
    public String catapage(int idpage){
    try{        
        StringBuffer pagedata = new StringBuffer();
        ResultSet catapage = DB.Query("SELECT * FROM catalog_pages WHERE id = '"+idpage+"' LIMIT 1");
        catapage.next();

        pagedata.append(vl64.Encode(idpage));

        if(catapage.getString("page_layout").equals("frontpage")){
            pagedata.append("frontpage3" + (char)2);
            pagedata.append(vl64.Encode(3));
            pagedata.append(catapage.getString("page_headline") + (char)2);
            pagedata.append(catapage.getString("page_teaser") + (char)2);
            pagedata.append("" + (char)2);
            pagedata.append(vl64.Encode(11));
            pagedata.append(catapage.getString("page_text2") + (char)2);
            pagedata.append(catapage.getString("page_text_details") + (char)2);
            pagedata.append("#FAF8CC" + (char)2);
            pagedata.append("#FAF8CC" + (char)2);
            pagedata.append("Other ways to get more credits >" + (char)2);
            pagedata.append("magic.credits" + (char)2);
        }else if(catapage.getString("page_layout").equals("pets")){
            pagedata.append("pets" + (char)2);
            pagedata.append(vl64.Encode(2));
            pagedata.append(catapage.getString("page_headline") + (char)2);
            pagedata.append(catapage.getString("page_teaser") + (char)2);
            pagedata.append(vl64.Encode(4));
            pagedata.append(catapage.getString("page_text1") + (char)2);
            pagedata.append("Give a name:" + (char)2);
            pagedata.append("Give a name:" + (char)2);
            pagedata.append("Pick a race:" + (char)2);
        }else if(catapage.getString("page_layout").equals("trophies")){
            pagedata.append("trophies" + (char)2);
            pagedata.append(vl64.Encode(1));
            pagedata.append(catapage.getString("page_headline") + (char)2);
            pagedata.append(vl64.Encode(2));
            pagedata.append(catapage.getString("page_text1") + (char)2);
            pagedata.append(catapage.getString("page_text_details") + (char)2);
        }else if(catapage.getString("page_layout").equals("spaces")){
            pagedata.append(catapage.getString("page_layout") + (char)2);
            pagedata.append(vl64.Encode(1));
            pagedata.append(catapage.getString("page_headline") + (char)2);
            pagedata.append(vl64.Encode(1));
            pagedata.append(catapage.getString("page_text1") + (char)2);
        }else{
             pagedata.append(catapage.getString("page_layout") + (char)2);
             pagedata.append(vl64.Encode(3));
             pagedata.append(catapage.getString("page_headline") + (char)2);
             pagedata.append(catapage.getString("page_teaser") + (char)2);
             pagedata.append(catapage.getString("page_special") + (char)2);
             pagedata.append(vl64.Encode(3));
             pagedata.append(catapage.getString("page_text1") + (char)2);
             pagedata.append(catapage.getString("page_text_details") + (char)2);
             pagedata.append(catapage.getString("page_text_teaser") + (char)2);
        }

        pagedata.append(Item(idpage));

        return pagedata.toString();

    }catch (Exception con)
    {
           con.printStackTrace();
           return "null";
    }

    }

    public String Item(int idpage){
    try{
          StringBuffer item = new StringBuffer();

          ResultSet itemcount = DB.Query("SELECT COUNT(id) AS iteco FROM catalog_items WHERE page_id = '"+idpage+"'");
          itemcount.next();

          if(itemcount.getInt("iteco") <= 1){
              return "H";
          }
         String[][] items = new String[itemcount.getInt("iteco")][6];

         int i = 0;
         ResultSet cataitem = DB.Query("SELECT id,item_ids,catalog_name,cost_credits,cost_pixels,amount FROM catalog_items WHERE page_id = '"+idpage+"'");
         while(cataitem.next()){
             items[i][0] = cataitem.getString("id");
             items[i][1] = cataitem.getString("catalog_name");
             items[i][2] = cataitem.getString("cost_credits");
             items[i][3] = cataitem.getString("cost_pixels");
             items[i][4] = cataitem.getString("amount");
             items[i][5] = cataitem.getString("item_ids");
             i++;
         }
         int j;

         for(j=0; j<i; j++){
             ResultSet furniture = DB.Query("SELECT type,sprite_id FROM furniture WHERE id = '"+items[j][5]+"'");
             furniture.next();

             item.append(vl64.Encode(Integer.parseInt(items[j][0])));
             item.append(items[j][1] + (char)2);
             item.append(vl64.Encode(Integer.parseInt(items[j][2])));
             item.append(vl64.Encode(Integer.parseInt(items[j][3])));
             item.append(vl64.Encode(1));
             item.append(furniture.getString("type") + (char)2); //TYPE
             item.append(vl64.Encode(furniture.getInt("sprite_id"))); //SPRITE ID
             item.append("" + (char)2);
             item.append(vl64.Encode(Integer.parseInt(items[j][4])));
             item.append(vl64.Encode(-1));
         }

         return vl64.Encode(i) + item.toString();
    }catch (Exception con)
    {
           con.printStackTrace();
           return "null";
    }
    }

    public String catasection(int rank){
    try{
          ResultSet catacont = DB.Query("SELECT COUNT(id) AS countcat FROM catalog_pages WHERE min_rank <= '" + rank + "'");
          catacont.next();
          int countcategories = catacont.getInt("countcat");
          
           String[][] categoriedata = new String[countcategories][7];
           int i = 0;
           int j;
           
        ResultSet section = DB.Query("SELECT id,parent_id,caption,visible,icon_color,icon_image,coming_soon FROM catalog_pages WHERE min_rank <= '"+rank+"'");
        while(section.next()){         
            categoriedata[i][0] = section.getString("id");
            categoriedata[i][1] = section.getString("parent_id");
            categoriedata[i][2] = section.getString("caption");
            categoriedata[i][3] = section.getString("visible");
            categoriedata[i][4] = section.getString("icon_color");
            categoriedata[i][5] = section.getString("icon_image");
            categoriedata[i][6] = section.getString("coming_soon");
            i++;
        }
        
        StringBuffer catasection = new StringBuffer();

        for(i=0; i<countcategories; i++){
            if(!(categoriedata[i][1].equals("-1"))){
                continue;
            }
            ResultSet catapage = DB.Query("SELECT COUNT(parent_id) AS count FROM catalog_pages WHERE parent_id = '" + categoriedata[i][0] + "' AND min_rank <= '" + rank + "'");
            catapage.next();

            catasection.append(vl64.Encode(Integer.parseInt(categoriedata[i][3])));
            catasection.append(vl64.Encode(Integer.parseInt(categoriedata[i][4])));
            catasection.append(vl64.Encode(Integer.parseInt(categoriedata[i][5])));
            if(catapage.getInt("count") > 0){ catasection.append(vl64.Encode(-1)); }else{ catasection.append(vl64.Encode(Integer.parseInt(categoriedata[i][0]))); }
            catasection.append(categoriedata[i][2] + (char)2);
            catasection.append(vl64.Encode(Integer.parseInt(categoriedata[i][6])));                    
            catasection.append(vl64.Encode(catapage.getInt("count")));

             for(j=0; j<countcategories; j++){
                 
                     if(!(categoriedata[j][1].equals(categoriedata[i][0]))){
                       continue;
                     }
                    catasection.append(vl64.Encode(Integer.parseInt(categoriedata[j][3])));
                    catasection.append(vl64.Encode(Integer.parseInt(categoriedata[j][4])));
                    catasection.append(vl64.Encode(Integer.parseInt(categoriedata[j][5])));
                    catasection.append(vl64.Encode(Integer.parseInt(categoriedata[j][0])));
                    catasection.append(categoriedata[j][2] + (char)2);
                    catasection.append(vl64.Encode(Integer.parseInt(categoriedata[j][6])));
                    catasection.append(vl64.Encode(0));
             }

        }

        return "A~" + vl64.Encode(0) + vl64.Encode(0) + vl64.Encode(0) + vl64.Encode(-1) + "" + (char)2 + vl64.Encode(0) + vl64.Encode(countcategories) + catasection;
    }catch (Exception con)
    {
           con.printStackTrace();
           return "H";
    }
    }

}
