package com.example.weterynarz
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.* // remember, mutableStateOf
import androidx.compose.foundation.lazy.LazyColumn // lista
import androidx.compose.foundation.lazy.items // lista items
import androidx.compose.foundation.clickable // lista click
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.Button
import androidx.compose.material3.Slider
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.weterynarz.ui.theme.WeterynarzTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//enableEdgeToEdge()
setContent {
WeterynarzTheme {
Wizyta()
}
}
}
}
@Composable
fun Wizyta() {
var imieNazwisko by remember { mutableStateOf("") } // imię i nazwisko
val zwierzeta = listOf("Pies", "Kot", "Swinka morska") // elementy listy
var wybraneZwierze by remember { mutableStateOf("") } // wybrane zwierzę
var sliderMax by remember { mutableStateOf(20f) } // max wartość slidera
var sliderWartosc by remember { mutableStateOf(0f) } // wartość slidera (slider value wymaga float)
var celWizyty by remember { mutableStateOf("") } // cel wizyty
var godzinaWizyty by remember { mutableStateOf("16:00") } // wpisany czas
var isValid by remember { mutableStateOf(true) } // błąd wpisanego czasu
var info by remember { mutableStateOf("") } // informacja końcowa
val timeRegex = Regex("^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$") // Wyrażenie regularne dla formatu 24-godzinnego
Column (
modifier = Modifier
.background(Color(0xFF90EE90))
){
Text(
text = "Wizyta u weterynarza",
fontSize = 24.sp,
modifier = Modifier
.background(Color(0xFF2E8B57))
.fillMaxWidth()
.padding(10.dp)
)
TextField(
value = imieNazwisko,
onValueChange = { imieNazwisko = it },
label = { Text("Imię i nazwisko właściciela...") },
modifier = Modifier
.background(Color(0xFF90EE90))
//.background(Color.Red, shape = RoundedCornerShape(8.dp))
.fillMaxWidth()
)
Text(
text = "Gatunek"
)
LazyColumn() {
items(zwierzeta) { item ->
Text(
text = item,
modifier = Modifier
.clickable {
wybraneZwierze = item
sliderWartosc = 0f // reset slidera
if (item=="Pies"){
sliderMax = 18f
}else if (item=="Kot"){
sliderMax = 20f
}else{
sliderMax = 9f
}
}
)
}
}
Row{
Text("Ile ma lat?")
Text("${sliderWartosc.toInt()}") // konwersja z float to int
Slider(
value = sliderWartosc,
onValueChange = { sliderWartosc = it },
valueRange = 0f..sliderMax
)
}
TextField(
value = celWizyty,
onValueChange = { celWizyty = it },
label = { Text("Cel wizyty...") },
modifier = Modifier
.fillMaxWidth()
.background(Color(0xFF90EE90))
)
TextField(
value = godzinaWizyty,
onValueChange = { newTime ->
godzinaWizyty = newTime
isValid = timeRegex.matches(newTime) // walidacja wpisywanego czasu
},
//label = { Text("Wprowadź czas (24h)") },
isError = !isValid, // jeśli isError == true label jest czerwony
textStyle = TextStyle(color = if (!isValid) Color.Red else Color.Black),
modifier = Modifier
.fillMaxWidth()
)
Button(onClick = {
info = "${imieNazwisko}, ${wybraneZwierze}, ${sliderWartosc.toInt()}, ${celWizyty}, ${godzinaWizyty}"
}) {
Text("OK")
}
Text(
text= if(isValid) info else "wprowadź czas we właściwym formacie"
)
}
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
WeterynarzTheme {
Wizyta()
}
}