/*
 * 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.3.0-rc01'

    implementation(libs.kotlinStdlibCommon)
    implementation("androidx.profileinstaller:profileinstaller:1.2.0")
    api(project(":compose:ui:ui"))

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

    api("androidx.compose.foundation:foundation:$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")

    androidTestImplementation(libs.truth)
    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 = "androidx.tv: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",
                "86acc593cd77d52784532163b5ab8156"
        )
)

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",
                "a74bfa05e68e2b6c2e108f022dfbfa26"
        )
)

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",
                "4c69e8a60a068e1e8191ed3840868881"
        )
)

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",
                "22078ee2f09dce3f39cdc23dc1188a82"
        )
)

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",
                "c58eaf4619972afbee7da7714dc072fc"
        )
)

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",
                "d4407572c6550d184133f8b3fd37869f"
        )
)

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",
                "1d16fbb5025b282ffeb8fe3a63a9de3d"
        )
)

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",
                "c1b403d4fcd43c423b3f1b0433e8bb43"
        )
)

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/LazySemantics.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",
                "6f93637153ebd05d9cba7ebaf12311c9"
        )
)

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",
                "ba8ee64efc5bcd18f28fe9bb9d987166"
        )
)

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",
                "3f91a6975c10c6a49ddc21f7828d7298"
        )
)

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",
                "b421c5e74856a78982efe0d8a79d10cb"
        )
)

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",
                "c600148ddfab1dde9f3ebe8349e77001"
        )
)

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",
                "1277598d36d8507d7bf0305cc629a11c"
        )
)

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",
                "062f95aa00d36fb1e048aa1ddb8154bc"
        )
)

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",
                "c6b402b685824ff216650da77063a131"
        )
)

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

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",
                "ab9a58f65e85b4fe4d621e9ed5b2db68"
        )
)

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

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",
                "e2bdba6cdbc870ea9607658ec60eb1eb"
        )
)

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/LazyListPinningModifier.kt",
                "src/main/java/androidx/tv/foundation/lazy/LazyListPinningModifier.kt",
                "e37450505d13ab0fd1833f136ec8aa3c"
        )
)

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",
                "fa1dffc993bdc486e0819c5d8018cda3"
        )
)

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",
                "72859815545394de5b9f7269f1366d21"
        )
)

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",
                "315f220a2674a50f82633a725dc39c1b"
        )
)

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",
                "d0d48557af324db3af7f4c46a6810026"
        )
)

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

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 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 + "\'"
    }
}
