package carleton.comp2601.historyviewer
import android.net.Uri
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import carleton.comp2601.historyviewer.ui.theme.HistoryViewerTheme
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.text.ClickableText
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.remember
import androidx.compose.ui.text.AnnotatedString
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        var hnTreeRoot = HNTree()
        hnTreeRoot.add("www.carleton.ca")
        hnTreeRoot.add("www.google.com")
        hnTreeRoot.add("www.cbc.ca.")
        hnTreeRoot.add("www.mit.edu")
        hnTreeRoot.add("www.google.com")
        setContent {
            HistoryViewerTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colors.background
                ) {
                    Start(hnTreeRoot)
                }
            }
        }
    }
}
@Composable
fun Start(hnTreeRoot: HNTree) {
    val allNodes = remember {
        mutableStateListOf<HNTree>()
    }
    hnTreeRoot.addMyNodes(allNodes)
    LazyColumn {
        item {
            Text(text = "HOSTS:")
        }
        items(allNodes) { child ->
            val spacing = "      ".repeat(child.treeLevel)
            val nodeName = child.hostSuffix
            ClickableText(text = AnnotatedString("$spacing$nodeName"), onClick = {
                child.toggleExpanded()
                allNodes.clear()
                hnTreeRoot.addMyNodes(allNodes)
                Log.d("HistoryViewer","toggled node on $nodeName")
            })
        }
    }
}
package carleton.comp2601.historyviewer
import android.util.Log
class HNTree {
    var hostComponent: String = ""
    var hostSuffix: String = ""
    var parent: HNTree = this
    var children: MutableList<HNTree> = mutableListOf()
    var treeLevel: Int = 0
    var expanded = true
    fun add(hostPrefix: String) {
        var allComponents: List<String>
        var component: String
        var child: HNTree? = null
        /* still have to deal with getting to the end */
        allComponents = hostPrefix.split(".")
        if (allComponents.last() == "") {
            allComponents = allComponents.dropLast(1)
        }
        component = allComponents.last()
        for (c in this.children) {
                 if (c.hostComponent == component) {
                     child = c
                     break
                 }
        }
        if (child == null) {
            child = HNTree()
            child.parent = this
            child.hostComponent = component
            child.hostSuffix = "$component.$hostSuffix"
            child.treeLevel = this.treeLevel + 1
            children.add(child)
        }
        val hostRemainder = allComponents.dropLast(1).joinToString(".")
        Log.d("HNTree", "$hostSuffix adding child $hostRemainder")
        if (component != hostPrefix) {
            child.add(hostRemainder)
        }
    }
    fun addMyNodes(nodes: MutableList<HNTree>) {
        nodes.add(this)
        if (expanded) {
            //Log.d("HNTree", "$hostSuffix is expanded " )
            for (n in children) {
                n.addMyNodes(nodes)
            }
        }
        //Log.d("HNTree", "$hostSuffix added " + nodes.count() + " nodes." )
    }
    fun toggleExpanded() {
        expanded = !expanded
    }
}