/*
 * 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.
 */

/**
 * This file was created using the `create_project.py` script located in the
 * `<AndroidX root>/development/project-creator` directory.
 *
 * Please use that script when creating a new project, rather than copying an existing project and
 * modifying its settings.
 */
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 annotationVersion = "1.8.0"
    def composeVersion = "1.6.8"
    def profileInstallerVersion = "1.3.1"

    api("androidx.annotation:annotation:$annotationVersion")
    api("androidx.compose.animation:animation:$composeVersion")
    api("androidx.compose.foundation:foundation:$composeVersion")
    api("androidx.compose.foundation:foundation-layout:$composeVersion")
    api("androidx.compose.runtime:runtime:$composeVersion")
    api("androidx.compose.ui:ui-util:$composeVersion")
    api("androidx.compose.ui:ui:$composeVersion")
    api("androidx.compose.ui:ui-graphics:$composeVersion")
    api("androidx.compose.ui:ui-text:$composeVersion")

    implementation("androidx.profileinstaller:profileinstaller:$profileInstallerVersion")

    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"
}

androidx {
    name = "TV Foundation"
    type = LibraryType.PUBLISHED_LIBRARY_ONLY_USED_BY_KOTLIN_CONSUMERS
    mavenVersion = LibraryVersions.TV
    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."
    legacyDisableKotlinStrictApiMode = true
}

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

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

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

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

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

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

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

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",
                "8196242113087ee01151552389745b14"
        )
)

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",
                "5b7d3ccdb09f41ec7790991ca313b734"
        )
)

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",
                "77cfe176fc4cc7b23b6d68a565882ef6"
        )
)

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

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",
                "50a01ef362751d7636de8cb125c25c24"
        )
)

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",
                "2d303e4008b8f691d2fba800f2cff10b"
        )
)

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

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

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

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",
                "7272cbf1f7ad406ecebbaedff50eea88"
        )
)

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

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

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

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",
                "7411fe66a22073f328aa307c8db7182d"
        )
)

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",
                "9ffacf5b72b88f881c0e85bdd00c6d43"
        )
)

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",
                "62be340f3ab25e3e2c43462c20ff78f9"
        )
)

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

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

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",
                "629d06f069b9c74f0dd06d7103f518ab"
        )
)

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/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",
                "adf5c0b390dd6d7080868ddd2c59d749"
        )
)

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

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",
                "80892e49be3d89d1bb94f2fab5e8db25"
        )
)

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/LazyGridMeasuredItem.kt",
                "f22dc4d4899dd7f53d7adeef4dabfd87"
        )
)

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

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/LazyGridMeasuredLine.kt",
                "98e45dc10e1f9cbc649b191dc243bbf7"
        )
)

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",
                "1525d43e14f6893ae7ba5290907b6908"
        )
)

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

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

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",
                "060b1374487b4b78c60409fdea1cd75f"
        )
)

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

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",
                "9a0f877f05d2e5a69c7b6a1eb8ef2b73"
        )
)

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

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

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"
    }
}
