from .core import Core
from .config import VERSION, ASYNC_COMPONENTS
from .log import set_logging

if ASYNC_COMPONENTS:
    from .async_components import load_components
else:
    from .components import load_components


__version__ = VERSION


instanceList = []

def load_async_itchat() -> Core:
    """load async-based itchat instance

    Returns:
        Core: the abstract interface of itchat
    """
    from .async_components import load_components
    load_components(Core)
    return Core()


def load_sync_itchat() -> Core:
    """load sync-based itchat instance

    Returns:
        Core: the abstract interface of itchat
    """
    from .components import load_components
    load_components(Core)
    return Core()


if ASYNC_COMPONENTS:
    instance = load_async_itchat()
else:
    instance = load_sync_itchat()


instanceList = [instance]

# I really want to use sys.modules[__name__] = originInstance
# but it makes auto-fill a real mess, so forgive me for my following **
# actually it toke me less than 30 seconds, god bless Uganda

# components.login
login                       = instance.login
get_QRuuid                  = instance.get_QRuuid
get_QR                      = instance.get_QR
check_login                 = instance.check_login
web_init                    = instance.web_init
show_mobile_login           = instance.show_mobile_login
start_receiving             = instance.start_receiving
get_msg                     = instance.get_msg
logout                      = instance.logout
# components.contact
update_chatroom             = instance.update_chatroom
update_friend               = instance.update_friend
get_contact                 = instance.get_contact
get_friends                 = instance.get_friends
get_chatrooms               = instance.get_chatrooms
get_mps                     = instance.get_mps
set_alias                   = instance.set_alias
set_pinned                  = instance.set_pinned
accept_friend               = instance.accept_friend
get_head_img                = instance.get_head_img
create_chatroom             = instance.create_chatroom
set_chatroom_name           = instance.set_chatroom_name
delete_member_from_chatroom = instance.delete_member_from_chatroom
add_member_into_chatroom    = instance.add_member_into_chatroom
# components.messages
send_raw_msg                = instance.send_raw_msg
send_msg                    = instance.send_msg
upload_file                 = instance.upload_file
send_file                   = instance.send_file
send_image                  = instance.send_image
send_video                  = instance.send_video
send                        = instance.send
revoke                      = instance.revoke
# components.hotreload
dump_login_status           = instance.dump_login_status
load_login_status           = instance.load_login_status
# components.register
auto_login                  = instance.auto_login
configured_reply            = instance.configured_reply
msg_register                = instance.msg_register
run                         = instance.run
# other functions
search_friends              = instance.search_friends
search_chatrooms            = instance.search_chatrooms
search_mps                  = instance.search_mps
set_logging                 = set_logging