#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2010  Douglas Blank <doug.blank@gmail.com>
# Copyright (C) 2011 Rob G. Healey <robhealey1@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

# $Id: $

import os
import const
from gen.ggettext import sgettext as _

def make_css_dict(tup):
    """
    Basically, make a named tuple.
    """
    return {
        "id": tup[0],
        "user": tup[1],
        "translation": tup[2],
        "filename": tup[3],
        "navigation": tup[4],
        "images": tup[5],
        "javascript": tup[6],
        }

def load_on_reg(dbstate, uistate, plugin):
    """
    Runs when plugin is registered.
    """
    dir, fname = os.path.split(__file__)
    from functools import partial
    path_css = partial(os.path.join, dir, "css")
    path_img = partial(os.path.join, dir, "images")
    path_js = partial(os.path.join, dir, "js")
    CSS_FILES = [

        # id, user selectable?, translated_name, fullpath, navigation target name, images, javascript
        # "default" is used as default

        # Basic Ash style sheet
        ["Basic-Ash",     1, _("Basic-Ash"),         
         path_css('Web_Basic-Ash.css'),     None, [], []],

        # Basic Blue style sheet with navigation menus
        ["Basic-Blue",    1, _("Basic-Blue"),        
         path_css('Web_Basic-Blue.css'),    "narrative-menus.css", [], []],

        # Basic Cypress style sheet
        ["Basic-Cypress", 1, _("Basic-Cypress"),     
         path_css('Web_Basic-Cypress.css'), None, [], []],

        # basic Lilac style sheet
        ["Basic-Lilac",   1, _("Basic-Lilac"),       
         path_css('Web_Basic-Lilac.css'),   None, [], []],

        # basic Peach style sheet
        ["Basic-Peach",   1, _("Basic-Peach"),       
         path_css('Web_Basic-Peach.css'),   None, [], []],

        # basic Spruce style sheet
        ["Basic-Spruce",  1, _("Basic-Spruce"),      
         path_css('Web_Basic-Spruce.css'),  None, [], []],

        # Mainz style sheet with its images
        ["Mainz",         1, _("Mainz"),             
         path_css('Web_Mainz.css'),         None, 
         [path_img("Web_Mainz_Bkgd.png"), 
          path_img("Web_Mainz_Header.png"), 
          path_img("Web_Mainz_Mid.png"), 
          path_img("Web_Mainz_MidLight.png")], []],

        # Nebraska style sheet
        ["Nebraska",      1, _("Nebraska"),          
         path_css('Web_Nebraska.css'),      None, [], []],

        # Visually Impaired style sheet with its navigation menus
        ["Visually Impaired", 1, _("Visually Impaired"), 
         path_css('Web_Visually.css'),  "narrative-menus.css", [], []],

        # no style sheet option
        ["No style sheet",1, _("No style sheet"),    [],    None, [], []],

        # ancestor tree style sheet and its images
        ["ancestortree",  0, "ancestortree",
         path_css("ancestortree.css"), None,
         [path_img("Web_Gender_Female.png"),
          path_img("Web_Gender_Male.png")],        []],

        # media reference regions style sheet
        ["behaviour",     0, "Behaviour",            
         path_css('behaviour.css'),         None,  [], []], 

        # mapstraction style sheet for NarrativeWeb place maps
        ["mapstraction",  0, "mapstraction",
         path_css("Mapstraction.css"),      None, [],
         [path_js("mapstraction", "mxn.core.js"),
          path_js("mapstraction", "mxn.googlev3.core.js"),
          path_js("mapstraction", "mxn.js"),
          path_js("mapstraction", "mxn.openlayers.core.js")] ],   

        # default style sheet in the options
        ["default",       0, _("Basic-Ash"),         
         path_css('Web_Basic-Ash.css'),     None, [], []],

        # default printer style sheet
        ["Print-Default", 0, "Print-Default",        
         path_css('Web_Print-Default.css'), None, [], []],

        # vertical navigation style sheet
        ["Navigation-Vertical", 0, "Navigation-Vertical", 
         path_css('Web_Navigation-Vertical.css'), None, [], []],

        # horizontal navigation style sheet
        ["Navigation-Horizontal", 0, "Navigation-Horizontal", 
         path_css('Web_Navigation-Horizontal.css'), None, [], []],

        # GeoView style sheet with its image
        ["GeoView", 0, "GeoView", 
         path_css("GeoView.css"), None,
         [path_img("crosshairs.png"),
          path_img("gramps-geo-altmap.png"),
          path_img("gramps-geo-birth.png"),
          path_img("gramps-geo-death.png"),
          path_img("gramps-geo-mainmap.png"),
          path_img("gramps-geo-marriage.png")],

         [path_js("mapstraction", "mxn.core.js"),
          path_js("mapstraction", "mxn.googlev3.core.js"),
          path_js("mapstraction", "mxn.js"),
          path_js("mapstraction", "mxn.openlayers.core.js")]],

        # all other images for use in NarrativeWeb
        ['All Images', 0, 'All Images', None, None, 
         [path_img("blank.gif"),
          path_img("document.png")], []],

        # Gramps Fav icon #2
        ["favicon2", 0, "favicon2", 
         path_img("favicon2.ico"), None, [], []],

        # copyright image
        ['Copyright', 0, 'Copyright',
         path_img("somerights20.gif"), None, [], []],

        # document image in case the media object is not an image
        ['Document', 0, 'Document',
         path_img("document.png"), None, [], []],

        # Google core javascript
        ["Google Core", 0, "Google Core", 
         path_js("mapstraction", "mxn.google.core.js"), None, [], []],

        # Google Earth core javascript
        ["Google Earth", 0, "Google Earth",
         path_js("mapstraction", "mxn.googleearth.core.js"), None, [], []],

        # Google GeoCoder javascript
        ["Google GeoCoder", 0, "Google GeoCoder",
         path_js("mapstraction", "mxn.google.geocoder.js"), None, [], []],

        ]

    return CSS_FILES

def process_list(data):
    """
    Gather all of the web resources together, and allow override files
    if available.
    """
    retval = []
    for row in data:
        file = row[3]
        if file:
            path, filename = os.path.split(file)
            # is there a override file in the VERSION_DIR/webstuff?
            # eg, ~/.gramps/gramps33/webstuff/Web_Nebraska.css
            # if so, replace this one:
            override = os.path.join(const.VERSION_DIR, "webstuff", filename)
            if os.path.exists(override):
                row[3] = override
        retval.append(row)
    # {"Mainz": {"id": "Mainz", "user":1, ...}}
    retdict = {}
    for css in retval:
        if css[0] in retdict:
            retdict[css[0]]["images"].append(css[5])
        else:
            retdict[css[0]] = make_css_dict(css)
    return retdict
