#!/usr/bin/env -S PYTHONPATH=../../../tools/extract-utils python3
#
# SPDX-FileCopyrightText: 2024 The LineageOS Project
# SPDX-License-Identifier: Apache-2.0
#

from extract_utils.fixups_blob import (
    blob_fixup,
    blob_fixups_user_type,
)
from extract_utils.fixups_lib import (
    lib_fixup_remove,
    lib_fixups,
    lib_fixups_user_type,
)
from extract_utils.main import (
    ExtractUtils,
    ExtractUtilsModule,
)


namespace_imports = [
    'hardware/qcom-caf/wlan',
    'vendor/qcom/opensource/display',
    'vendor/qcom/opensource/commonsys/display',
    'vendor/qcom/opensource/commonsys-intf/display',
]

def lib_fixup_vendor_suffix(lib: str, partition: str, *args, **kwargs):
    return f'{lib}_{partition}' if partition == 'vendor' else None

lib_fixups: lib_fixups_user_type = {
    **lib_fixups,
    (
        'com.qualcomm.qti.dpm.api@1.0',
        'vendor.qti.diaghal@1.0',
        'vendor.qti.imsrtpservice@3.0',
    ): lib_fixup_vendor_suffix,
    (
    ): lib_fixup_remove,
}

blob_fixups: blob_fixups_user_type = {
    'system/priv-app/AsusCamera/AsusCamera.apk': blob_fixup()
        .apktool_patch('blob-patches/AsusCamera.patch', '-s'),
    'system/priv-app/AsusGallery/AsusGallery.apk': blob_fixup()
        .apktool_patch('blob-patches/AsusGallery.patch', '-s'),
    'system/priv-app/AudioWizardView/AudioWizardView.apk': blob_fixup()
        .apktool_patch('blob-patches/AudioWizardView.patch'),
    'system_ext/priv-app/com.qualcomm.location/com.qualcomm.location.apk': blob_fixup()
        .apktool_patch('blob-patches/com.qualcomm.location.patch'),
    ('vendor/bin/vendor.dpmd',
      'vendor/bin/hw/vendor.qti.hardware.AGMIPC@1.0-service'): blob_fixup()
        .add_needed('libhidlbase_shim.so'),
    ('vendor/bin/hw/android.hardware.security.keymint-service-qti',
     'vendor/lib/libqtikeymint.so',
     'vendor/lib64/libqtikeymint.so'): blob_fixup()
        .replace_needed('android.hardware.security.keymint-V1-ndk_platform.so', 'android.hardware.security.keymint-V1-ndk.so')
        .replace_needed('android.hardware.security.secureclock-V1-ndk_platform.so', 'android.hardware.security.secureclock-V1-ndk.so')
        .replace_needed('android.hardware.security.sharedsecret-V1-ndk_platform.so', 'android.hardware.security.sharedsecret-V1-ndk.so')
        .add_needed('android.hardware.security.rkp-V1-ndk.so'),
    'vendor/bin/hw/android.hardware.neuralnetworks-shim-service-qti': blob_fixup()
        .replace_needed('android.hardware.neuralnetworks-V1-ndk_platform.so', 'android.hardware.neuralnetworks-V1-ndk.so')
        .replace_needed('android.hardware.common-V2-ndk_platform.so', 'android.hardware.common-V2-ndk.so'),
    ('vendor/bin/hw/sxrservice',
     'vendor/lib/libqvrservice.so',
      'vendor/lib64/libqvrservice.so'): blob_fixup()
        .replace_needed('vendor.qti.hardware.qxr-V1-ndk_platform.so', 'vendor.qti.hardware.qxr-V1-ndk.so'),
    ('vendor/bin/hw/android.hardware.identity-service-qti',
     'vendor/lib/libqtiidentitycredential.so',
     'vendor/lib64/libqtiidentitycredential.so'): blob_fixup()
        .replace_needed('android.hardware.identity-V3-ndk_platform.so', 'android.hardware.identity-V3-ndk.so')
        .replace_needed('android.hardware.keymaster-V3-ndk_platform.so', 'android.hardware.keymaster-V3-ndk.so'),
    'vendor/lib64/vendor.qti.hardware.qxr-V1-ndk.so': blob_fixup()
        .replace_needed('android.hardware.common-V2-ndk_platform.so', 'android.hardware.common-V2-ndk.so'),
    ('vendor/bin/hw/android.hardware.gnss-aidl-service-qti',
     'vendor/lib/hw/android.hardware.gnss-aidl-impl-qti.so',
     'vendor/lib64/hw/android.hardware.gnss-aidl-impl-qti.so',
     'vendor/lib64/libgarden.so',
     'vendor/lib64/libgarden_haltests_e2e.so'): blob_fixup()
        .replace_needed('android.hardware.gnss-V1-ndk_platform.so', 'android.hardware.gnss-V1-ndk.so'),
    ('vendor/bin/libqtr_sdk',
     'vendor/bin/qcc-trd',
     'vendor/lib/libqtr_sdk.so',
     'vendor/lib64/libqtr_sdk.so'): blob_fixup()
        .replace_needed('libgrpc++_unsecure.so', 'libgrpc++_unsecure_vendor.so'),
    ('vendor/etc/media_codecs_cape.xml',
     'vendor/etc/media_codecs_cape_vendor.xml'): blob_fixup()
        .regex_replace('.*media_codecs_(google_audio|google_c2|google_telephony|google_video|vendor_audio).*\n', ''),
    ('vendor/etc/seccomp_policy/atfwd@2.0.policy',
     'vendor/etc/seccomp_policy/modemManager.policy',
     'vendor/etc/seccomp_policy/sensors-qesdk.policy'): blob_fixup()
        .add_line_if_missing('gettid: 1'),
    'vendor/lib64/libQnnGpu.so': blob_fixup()
        .strip_debug_sections(),
    ('vendor/lib/libcamximageformatutils.so',
     'vendor/lib64/libcamximageformatutils.so'): blob_fixup()
        .replace_needed('vendor.qti.hardware.display.config-V2-ndk_platform.so', 'vendor.qti.hardware.display.config-V2-ndk.so'),
    'vendor/lib64/libvendor.goodix.hardware.biometrics.fingerprint@2.1.so': blob_fixup()
        .remove_needed('libhidltransport.so')
        .replace_needed('libhidlbase.so', 'libhidlbase-v32.so'),
    'vendor/lib64/vendor.libdpmframework.so': blob_fixup()
        .add_needed('libhidlbase_shim.so'),
    ('vendor/lib64/ese_spi_nxp_snxxx.so',
     'vendor/lib64/nfc_nci_nxp_snxxx.so'): blob_fixup()
        .add_needed('libbase_shim.so'),
}  # fmt: skip

module = ExtractUtilsModule(
    'zenfone9',
    'asus',
    blob_fixups=blob_fixups,
    lib_fixups=lib_fixups,
    namespace_imports=namespace_imports,
)

module.add_proprietary_file('proprietary-files-product.txt')
module.add_proprietary_file('proprietary-files-vendor.txt')

if __name__ == '__main__':
    utils = ExtractUtils.device(module)
    utils.run()
