/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import androidx.build.LibraryType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

import java.security.MessageDigest
import java.util.stream.Collectors

plugins {
    id("AndroidXPlugin")
    id("AndroidXComposePlugin")
    id("com.android.library")
    id("org.jetbrains.kotlin.android")
}

dependencies {
    api(libs.kotlinStdlib)

    def composeVersion = '1.4.3'

    implementation(libs.kotlinStdlibCommon)
    implementation("androidx.profileinstaller:profileinstaller:1.3.1")

    api("androidx.annotation:annotation:1.6.0")
    api("androidx.compose.animation:animation:$composeVersion")
    api("androidx.compose.runtime:runtime:$composeVersion")

    api(project(":compose:foundation:foundation"))
    api("androidx.compose.ui:ui:$composeVersion")
    api("androidx.compose.foundation:foundation-layout:$composeVersion")
    api("androidx.compose.ui:ui-graphics:$composeVersion")
    api("androidx.compose.ui:ui-text:$composeVersion")
    api("androidx.compose.ui:ui-util:$composeVersion")

    implementation('androidx.media3:media3-exoplayer:1.0.0-beta03')

    androidTestImplementation(libs.truth)
    androidTestImplementation(project(":compose:runtime:runtime"))
    androidTestImplementation(project(":compose:ui:ui-test"))
    androidTestImplementation(project(":compose:ui:ui-test-junit4"))
    androidTestImplementation(project(":compose:test-utils"))
    androidTestImplementation(libs.testRunner)
}

android {
    namespace "androidx.tv.foundation"
    defaultConfig {
        minSdkVersion 21
    }
    lintOptions {
        disable 'IllegalExperimentalApiUsage' // TODO (b/233188423): Address before moving to beta
    }
}

androidx {
    name = "TV Foundation"
    type = LibraryType.PUBLISHED_LIBRARY
    inceptionYear = "2022"
    description = "This library makes it easier for developers" +
            "to write Jetpack Compose applications for TV devices by providing " +
            "functionality to support TV specific devices sizes, shapes and d-pad navigation " +
            "supported components. It builds upon the Jetpack Compose libraries."
    targetsJavaConsumers = false
}

// Functions and tasks to monitor changes in copied files.

task generateMd5 {
    ext.genMd5 = { fileNameToHash ->
        MessageDigest digest = MessageDigest.getInstance("MD5")
        file(fileNameToHash).withInputStream(){is->
            byte[] buffer = new byte[8192]
            int read = 0
            while( (read = is.read(buffer)) > 0) {
                digest.update(buffer, 0, read);
            }
        }
        byte[] md5sum = digest.digest()
        BigInteger bigInt = new BigInteger(1, md5sum)
        bigInt.toString(16).padLeft(32, '0')
    }

    doLast {
        String hashValue = genMd5(file)
        print "value="
        println hashValue
    }
}

List<CopiedClass> copiedClasses = new ArrayList<>();

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt",
                "src/main/java/androidx/tv/foundation/ScrollableWithPivot.kt",
                "01908be77830b70de53736dfab57d9db"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/DataIndex.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/DataIndex.kt",
                "2aa3c6d2dd05057478e723b2247517e1"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemScopeImpl.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl.kt",
                "37cb0caf8a170a4161da346806c7a236"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListHeaders.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyListHeaders.kt",
                "4d71c69f9cb38f741da9cfc4109567dd"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemPlacementAnimator.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator.kt",
                "b27d616f6e4758d9e5cfd721cd74f696"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyListItemProvider.kt",
                "79d9698efce71af7507adb1f1f13d587"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyList.kt",
                "9ad614f60b201360f2c276678674a09d"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasure.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasure.kt",
                "a209b6cf2bcd8a0aff71488ab28c215f"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasureResult.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasureResult.kt",
                "5cc9c72197679de004d98b73ffacf038"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListScopeImpl.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListScopeImpl.kt",
                "fab951ddba90c5c5426e4d0104bc9929"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListScrollPosition.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyListScrollPosition.kt",
                "08d08515f25eb3032f6efbf9f86be102"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyListState.kt",
                "15ed411b8761387c1c0602b68185e312"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyMeasuredItem.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyMeasuredItem.kt",
                "a42bc6b7859e14871492ff27ca9bd9a2"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyMeasuredItemProvider.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyMeasuredItemProvider.kt",
                "0dcde73635efe26203f70351437cb6fa"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListSemantics.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazySemantics.kt",
                "3a1e86a55ea2282c12745717b5a60cfd"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/ItemIndex.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/ItemIndex.kt",
                "1031b8b91a81c684b3c4584bc93d3fb0"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridDsl.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridDsl.kt",
                "6a0b2db56ef38fb1ac004e4fc9847db8"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemInfo.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridItemInfo.kt",
                "1f3b13ee45de79bc67ace4133e634600"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemPlacementAnimator.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator.kt",
                "bf426a9ae63c2195a88cb382e9e8033e"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemScopeImpl.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridItemScopeImpl.kt",
                "b3ff4600791c73028b8661c0e2b49110"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemScope.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridItemScope.kt",
                "1a40313cc5e67b5808586c012bbfb058"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemProvider.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridItemProvider.kt",
                "838dc7602c43c0210a650340110f5f94"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyGrid.kt",
                "c63daa5bd3a004f08fc14a510765b681"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridLayoutInfo.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridLayoutInfo.kt",
                "20f7055a2556d1c8ccd12873b1d8af2a"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasure.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridMeasure.kt",
                "65b541f64ffc6267ebe7852497a4f37f"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasureResult.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult.kt",
                "1a9f3308a5865beb6b53f547493f8d20"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridScopeImpl.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridScopeImpl.kt",
                "e92ebc01a8b205d304e0b0d3c40636f8"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridScopeMarker.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridScopeMarker.kt",
                "0b7ff258a80e2413f89d56ab0ef41b46"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridScrollPosition.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridScrollPosition.kt",
                "70bac76aeb2617b8f5c706f1867800fd"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridSpan.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridSpan.kt",
                "cc63cb4f05cc556e8fcf7504ac0ea57c"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider.kt",
                "2a794820a36acc55a13d95fd65d03f45"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridState.kt",
                "0e55034861317320888b77f5183b326f"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasuredItem.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredItem.kt",
                "8bbfd4cdd2d1f090f51ffb0f2d625309"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyMeasuredItemProvider.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider.kt",
                "e36c6adfcd6cef885600d62775de0917"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasuredLine.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredLine.kt",
                "dedf02d724fb6d470f9566dbf6a260f9"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyMeasuredLineProvider.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider.kt",
                "04949bb943c61f7a18358c3e5543318e"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazySemantics.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazySemantics.kt",
                "bb397307f2cc3fd87bcc7585bf403039"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyDsl.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyDsl.kt",
                "9d86fad30c0f3de2231fbef3f63db53e"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyScopeMarker.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListScopeMarker.kt",
                "f7b72b3c6bad88868153300b9fbdd922"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemScope.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListItemScope.kt",
                "6254294540cfadf2d6da1bbbce1611e8"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemInfo.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListItemInfo.kt",
                "7571daa18ca079fd6de31d37c3022574"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListLayoutInfo.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListLayoutInfo.kt",
                "1e2ff3f4fcaa528d1011f32c8a87e100"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutSemantics.kt",
                "src/main/java/androidx/tv/foundation/lazy/layout/LazyLayoutSemantics.kt",
                "8b9e4a03c5097b4ef7377f98da95bbcd"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyAnimateScroll.kt",
                "src/main/java/androidx/tv/foundation/lazy/layout/LazyAnimateScroll.kt",
                "f9d4a924665f65ac319b6071358431b9"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateScrollScope.kt",
                "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridAnimateScrollScope.kt",
                "d07400716d6139405135ffbfe042b762"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListAnimateScrollScope.kt",
                "src/main/java/androidx/tv/foundation/lazy/list/LazyListAnimateScrollScope.kt",
                "c769969ce9a74ee6006d1c0b76b47095"
        )
)

copiedClasses.add(
        new CopiedClass(
                "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ContentInViewModifier.kt",
                "src/main/java/androidx/tv/foundation/ContentInViewModifier.kt",
                "6dec263110d0fe60021cf6fb9c93bd90"
        )
)

copiedClasses.add(
        new CopiedClass(
                "compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutSemanticState.kt",
                "src/main/java/androidx/tv/foundation/lazy/layout/LazyLayoutSemanticState.kt",
                "ad"
        )
)

String generateMd5(String fileNameToHash) {
    try {
        MessageDigest digest = MessageDigest.getInstance("MD5")
        file(fileNameToHash).withInputStream() { is ->
            byte[] buffer = new byte[8192]
            int read
            while ((read = is.read(buffer)) > 0) {
                digest.update(buffer, 0, read);
            }
        }
        byte[] md5sum = digest.digest()
        BigInteger bigInt = new BigInteger(1, md5sum)
        bigInt.toString(16).padLeft(32, '0')
    } catch (Exception e) {
        throw new GradleException("Failed for file=$fileNameToHash", e)
    }
}

task printCopiedClasses {
    doLast {
        copiedClasses.forEach(copiedClass -> {
            String actualMd5 = generateMd5(copiedClass.originalFilePath)
            System.out.println(copiedClass.toString(actualMd5))
        })
    }
}

task doCopiesNeedUpdate {
    doLast {
        List<String> failureFiles = new ArrayList<>()
        boolean failures = false
        copiedClasses.forEach(copiedClass -> {
            assert file(copiedClass.originalFilePath).exists()
            assert file(copiedClass.copyFilePath).exists()
            try {
                String actualMd5 = generateMd5(copiedClass.originalFilePath)
                if (copiedClass.lastKnownGoodHash != actualMd5) {
                    failureFiles.add(copiedClass.toString()+ "\nactual= " + actualMd5 + "\n")
                }
            } catch (Exception e) {
                logger.error("Failed for file=${copiedClass.originalFilePath}", e)
                failures = true
            }
        })

        if (!failureFiles.isEmpty()) {
            throw new GradleException(
                    "Files that were copied have been updated at the source. " +
                            "Please update the copy and then" +
                            " update the hash in the compose-foundation build.gradle file." +
                            failureFiles.stream().collect(Collectors.joining("\n", "\n", "")) + "\ncount=${failureFiles.size()}")
        }

        if (failures) {
            throw new GradleException("There were errors. Check the logs.")
        }
    }
}

class CopiedClass {
    String originalFilePath
    String copyFilePath
    String lastKnownGoodHash

    CopiedClass(String originalFilePath, String copyFilePath, String lastKnownGoodHash) {
        this.originalFilePath = originalFilePath
        this.copyFilePath = copyFilePath
        this.lastKnownGoodHash = lastKnownGoodHash
    }

    @Override
    String toString() {
        return "originalFilePath='" + originalFilePath + '\'\n' +
                "copyFilePath='" + copyFilePath + '\'\n' +
                "lastKnownGoodHash='" + lastKnownGoodHash + '\'\n' +
                "diffCmd='" + "kdiff3 " + originalFilePath + " " + copyFilePath + "\'"
    }

    String toString(String actualHash) {
        return "copiedClasses.add(\n" +
                "        new CopiedClass(\n" +
                "                \"$originalFilePath\",\n" +
                "                \"$copyFilePath\",\n" +
                "                \"$actualHash\"\n" +
                "        )\n" +
                ")\n"
    }
}
