#!/usr/bin/python
# ----------------------------------------------------------------------------
# modify the runtime template for prebuilt engine
#
# Copyright 2014 (C) zhangbin
#
# License: MIT
# ----------------------------------------------------------------------------
'''
modify the runtime template for prebuilt engine
'''

import os
import sys

LUA_TEMPLATE_PATH = "templates/lua-template-runtime"

#
# WIN32_LINK_CPP_LIBS = [
#     "libbox2d", "libcocos2d", "libSpine"
# ]
#
# WIN32_LINK_LUA_LIBS = [ "libluacocos2d", "libsimulator" ]
#
# WIN32_LINK_JS_LIBS = [ "libjscocos2d" ]

XCODE_LINK_CPP_LIBS = [
    "libcocos2d"
]

XCODE_LINK_LUA_LIBS = [ "libluacocos2d", "libsimulator" ]

XCODE_LINK_JS_LIBS = [ "libjscocos2d", "libsimulator" ]

class TemplateModifier(object):
    def __init__(self, engine_path, libs_path, version, is_for_package):
        if os.path.isabs(engine_path):
            self.engine_path = engine_path
        else:
            self.engine_path = os.path.abspath(engine_path)

        if os.path.isabs(libs_path):
            self.libs_path = libs_path
        else:
            self.libs_path = os.path.abspath(libs_path)

        self.version = version
        self.is_for_package = is_for_package

    def modify_xcode_proj(self, proj_file_path, language):
        proj_modifier_path = os.path.join(os.path.dirname(__file__), 'proj_modifier')
        sys.path.append(proj_modifier_path)

        import modify_pbxproj
        pbx_proj = modify_pbxproj.XcodeProject.Load(proj_file_path)

        replace_engine_strs = []
        if language == "cpp":
            targetName = "HelloCpp"
            link_libs = XCODE_LINK_CPP_LIBS
            replace_engine_strs.append("$(SRCROOT)/../cocos2d")
        elif language == "lua":
            targetName = "HelloLua"
            link_libs = XCODE_LINK_CPP_LIBS + XCODE_LINK_LUA_LIBS
            replace_engine_strs.append("$(SRCROOT)/../../cocos2d-x")
        else:
            targetName = "HelloJavascript"
            link_libs = XCODE_LINK_CPP_LIBS + XCODE_LINK_JS_LIBS
            replace_engine_strs.append("$(SRCROOT)/../../cocos2d-x")
            replace_engine_strs.append("../../cocos2d-x")
        ios_target_name = "%s-mobile" % targetName
        mac_target_name = "%s-desktop" % targetName

        # remove the target dependencies
        pbx_proj.remove_proj_reference("cocos2d_libs.xcodeproj")
        if language == "lua":
            pbx_proj.remove_proj_reference("cocos2d_lua_bindings.xcodeproj")
            pbx_proj.remove_proj_reference("libsimulator.xcodeproj")

        if language == "js":
            pbx_proj.remove_proj_reference("cocos2d_js_bindings.xcodeproj")
            pbx_proj.remove_proj_reference("libsimulator.xcodeproj")
            pbx_proj.remove_file_by_path("../../cocos2d-x/cocos/scripting/js-bindings/script")

            common_group = pbx_proj.get_or_create_group("JS Common")
            pbx_proj.add_file_if_doesnt_exist("../../../script", common_group, tree="<group>")
            # pbx_proj.remove_group_by_name("JS Common")

        # add libraries search path
        libs_path = self.libs_path
        if self.is_for_package:
            libs_path = "/Applications/Cocos/frameworks/%s/prebuilt" % self.version
        ios_template_prebuilt_path = os.path.join(libs_path, "ios")
        pbx_proj.add_library_search_paths(ios_template_prebuilt_path, target_name=ios_target_name, recursive=False)
        mac_template_prebuilt_path = os.path.join(libs_path, "mac")
        pbx_proj.add_library_search_paths(mac_template_prebuilt_path, target_name=mac_target_name, recursive=False)

        # add libraries for targets
        ios_lib_group = pbx_proj.get_or_create_group("ios-libs")
        mac_lib_group = pbx_proj.get_or_create_group("mac-libs")
        for lib in link_libs:
            ios_lib_name = "%s iOS.a" % lib
            mac_lib_name = "%s Mac.a" % lib
            ios_lib_path = os.path.join(ios_template_prebuilt_path, ios_lib_name)
            pbx_proj.add_file_if_doesnt_exist(ios_lib_path, ios_lib_group, tree="<group>", target=ios_target_name)

            mac_lib_path = os.path.join(mac_template_prebuilt_path, mac_lib_name)
            pbx_proj.add_file_if_doesnt_exist(mac_lib_path, mac_lib_group, tree="<group>", target=mac_target_name)

        # add studio resources to the xcode project of cpp template
        if language == "cpp":
            pbx_proj.remove_file_by_path("CloseNormal.png")
            pbx_proj.remove_file_by_path("CloseSelected.png")
            pbx_proj.remove_file_by_path("HelloWorld.png")
            pbx_proj.remove_file_by_path("Marker Felt.ttf")
            pbx_proj.remove_file_by_path("fonts")
            pbx_proj.remove_file_by_path("res")

            res_group = pbx_proj.get_or_create_group("Resources")
            pbx_proj.add_file_if_doesnt_exist("../Resources/res", res_group, tree="<group>")

        if pbx_proj.modified:
            print("Save xcode project")
            pbx_proj.save()

        # modify the engine path
        f = open(proj_file_path)
        file_content = f.read()
        f.close()

        install_path = self.engine_path
        if self.is_for_package:
            install_path = "/Applications/Cocos/frameworks/%s" % self.version
        for old_engine_path in replace_engine_strs:
            file_content = file_content.replace(old_engine_path, install_path)

        f = open(proj_file_path, "w")
        f.write(file_content)