package com.fastest.pass.home.presentation.ui.components

import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusManager
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.platform.SoftwareKeyboardController
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.fastest.pass.R

@Composable
fun AddBankAccountFormScreen() {
    val keyboardController = LocalSoftwareKeyboardController.current
    val focusManager = LocalFocusManager.current

    Box(
        modifier = Modifier
            .fillMaxSize()
            .padding(horizontal = 30.dp)
            .padding(bottom = 20.dp)
            .background(Color.Transparent)
            .imePadding()
    ) {
        SaveButtonABAFS(buttonText = R.string.save)

        Column(
            modifier = Modifier
                .fillMaxSize()
                .padding(horizontal = 0.dp)
                .padding(bottom = 80.dp)
                .background(Color.Transparent)
                .verticalScroll(rememberScrollState())
        ) {
            Spacer(modifier = Modifier.height(20.dp))
            NameTextFieldABAFS(keyboardController = keyboardController, focusManager = focusManager, R.string.title)
            Spacer(modifier = Modifier.height(20.dp))
            NameTextFieldABAFS(keyboardController = keyboardController, focusManager = focusManager, R.string.bank_name)
            Spacer(modifier = Modifier.height(20.dp))
            NameTextFieldABAFS(keyboardController = keyboardController, focusManager = focusManager, R.string.account_type)
            Spacer(modifier = Modifier.height(20.dp))
            NumberTextFieldAPS(keyboardController = keyboardController, focusManager = focusManager, R.string.routing_number, "123456789")
            Spacer(modifier = Modifier.height(20.dp))
            TextNumberTextFieldAPS(keyboardController = keyboardController, focusManager = focusManager, R.string.account_number, "12345678912")
            Spacer(modifier = Modifier.height(20.dp))
            TextNumberTextFieldAPS(keyboardController = keyboardController, focusManager = focusManager, R.string.swift_code, "1234567890")
            Spacer(modifier = Modifier.height(20.dp))
            TextNumberTextFieldAPS(keyboardController = keyboardController, focusManager = focusManager, R.string.iban_number, "12 12 123456 12345678")
            Spacer(modifier = Modifier.height(20.dp))
            TextNumberTextFieldAPS(keyboardController = keyboardController, focusManager = focusManager, R.string.pin, "1234")
            Spacer(modifier = Modifier.height(20.dp))
            NameTextFieldABAFS(keyboardController = keyboardController, focusManager = focusManager, R.string.branch_address)
            Spacer(modifier = Modifier.height(20.dp))
            PhoneNumberTextFieldAPS(keyboardController = keyboardController, focusManager = focusManager, labelText = R.string.branch_phone)
            Spacer(modifier = Modifier.height(20.dp))
            NotesTextFieldABAFS(keyboardController = keyboardController, focusManager = focusManager)
//            Spacer(modifier = Modifier.height(25.dp))
//            SaveButtonABAFS(buttonText = R.string.save)
        }
    }
}

@Composable
fun ColumnScope.NameTextFieldABAFS(
    keyboardController: SoftwareKeyboardController?,
    focusManager: FocusManager,
    labelText: Int
) {
    var text by remember { mutableStateOf("") }

    TextField(
        value = text,
        onValueChange = {
            text = it
        },
        textStyle = MaterialTheme.typography.displayMedium,
        modifier = Modifier
            .align(Alignment.Start)
            .fillMaxWidth()
            .defaultMinSize(minHeight = 60.dp)
            .wrapContentHeight()
            .border(
                1.dp,
                color = colorResource(id = R.color.gray_border_textfield),
                shape = RoundedCornerShape(16.dp)
            )
            .background(color = colorResource(id = R.color.transparent)),
        shape = RoundedCornerShape(16.dp),
//        placeholder = {
//            Text(
//                text = stringResource(id = R.string.enter_email_address),
//                color = colorResource(id = R.color.gray_splash),
//                style = MaterialTheme.typography.displayMedium
//            )
//        },
        label = {
            Text(text = stringResource(id = labelText),
                style = MaterialTheme.typography.titleSmall.copy(
                    color = colorResource(id = R.color.gray_text)
                )
            )
        },
//        leadingIcon = {
//            Image(
//                painter = painterResource(id = R.drawable.profile_circle),
//                contentDescription = "Title Logo",
//                modifier = Modifier
//                    .size(24.dp, 24.dp)
//            )
//        },
        colors = TextFieldDefaults.colors(
            focusedLabelColor = colorResource(id = R.color.gray_splash),
            unfocusedContainerColor = colorResource(id = R.color.transparent),
            focusedContainerColor = colorResource(id = R.color.transparent),
            focusedIndicatorColor = colorResource(id = R.color.transparent),
            disabledIndicatorColor = colorResource(id = R.color.transparent),
            unfocusedIndicatorColor = colorResource(id = R.color.transparent),
            cursorColor = colorResource(id = R.color.gray_splash),
        ),
        keyboardOptions = KeyboardOptions(
            keyboardType = KeyboardType.Text,
            imeAction = ImeAction.Next
        ),
        keyboardActions = KeyboardActions(
            onDone = {
                focusManager.clearFocus()
                keyboardController?.hide()
            }
        ),
    )
}

@Composable
fun ColumnScope.NumberTextFieldAPS(
    keyboardController: SoftwareKeyboardController?,
    focusManager: FocusManager,
    labelText: Int,
    placeholder: String
) {
    var text by remember { mutableStateOf("") }

    TextField(
        value = text,
        onValueChange = {
            text = it
        },
        textStyle = MaterialTheme.typography.displayMedium,
        modifier = Modifier
            .align(Alignment.Start)
            .fillMaxWidth()
            .defaultMinSize(minHeight = 60.dp)
            .wrapContentHeight()
            .border(
                1.dp,
                color = colorResource(id = R.color.gray_border_textfield),
                shape = RoundedCornerShape(16.dp)
            )
            .background(color = colorResource(id = R.color.transparent)),
        shape = RoundedCornerShape(16.dp),
//        placeholder = {
//            Text(
//                text = placeholder,
//                style = MaterialTheme.typography.titleSmall.copy(
//                    color = colorResource(id = R.color.gray_text)
//                )
//            )
//        },
        label = {
            Text(text = stringResource(id = labelText),
                style = MaterialTheme.typography.titleSmall.copy(
                    color = colorResource(id = R.color.gray_text)
                )
            )
        },
//        leadingIcon = {
//            Image(
//                painter = painterResource(id = R.drawable.profile_circle),
//                contentDescription = "Title Logo",
//                modifier = Modifier
//                    .size(24.dp, 24.dp)
//            )
//        },
        colors = TextFieldDefaults.colors(
            focusedLabelColor = colorResource(id = R.color.gray_splash),
            unfocusedContainerColor = colorResource(id = R.color.transparent),
            focusedContainerColor = colorResource(id = R.color.transparent),
            focusedIndicatorColor = colorResource(id = R.color.transparent),
            disabledIndicatorColor = colorResource(id = R.color.transparent),
            unfocusedIndicatorColor = colorResource(id = R.color.transparent),
            cursorColor = colorResource(id = R.color.gray_splash),
        ),
        keyboardOptions = KeyboardOptions(
            keyboardType = KeyboardType.Number,
            imeAction = ImeAction.Next
        ),
        keyboardActions = KeyboardActions(
            onDone = {
                focusManager.clearFocus()
                keyboardController?.hide()
            }
        ),
    )
}

@Composable
fun ColumnScope.TextNumberTextFieldAPS(
    keyboardController: SoftwareKeyboardController?,
    focusManager: FocusManager,
    labelText: Int,
    placeholder: String
) {
    var text by remember { mutableStateOf("") }

    TextField(
        value = text,
        onValueChange = {
            text = it
        },
        textStyle = MaterialTheme.typography.displayMedium,
        modifier = Modifier
            .align(Alignment.Start)
            .fillMaxWidth()
            .defaultMinSize(minHeight = 60.dp)
            .wrapContentHeight()
            .border(
                1.dp,
                color = colorResource(id = R.color.gray_border_textfield),
                shape = RoundedCornerShape(16.dp)
            )
            .background(color = colorResource(id = R.color.transparent)),
        shape = RoundedCornerShape(16.dp),
//        placeholder = {
//            Text(
//                text = placeholder,
//                style = MaterialTheme.typography.titleSmall.copy(
//                    color = colorResource(id = R.color.gray_text)
//                )
//            )
//        },
        label = {
            Text(text = stringResource(id = labelText),
                style = MaterialTheme.typography.titleSmall.copy(
                    color = colorResource(id = R.color.gray_text)
                )
            )
        },
//        leadingIcon = {
//            Image(
//                painter = painterResource(id = R.drawable.profile_circle),
//                contentDescription = "Title Logo",
//                modifier = Modifier
//                    .size(24.dp, 24.dp)
//            )
//        },
        colors = TextFieldDefaults.colors(
            focusedLabelColor = colorResource(id = R.color.gray_splash),
            unfocusedContainerColor = colorResource(id = R.color.transparent),
            focusedContainerColor = colorResource(id = R.color.transparent),
            focusedIndicatorColor = colorResource(id = R.color.transparent),
            disabledIndicatorColor = colorResource(id = R.color.transparent),
            unfocusedIndicatorColor = colorResource(id = R.color.transparent),
            cursorColor = colorResource(id = R.color.gray_splash),
        ),
        keyboardOptions = KeyboardOptions(
            keyboardType = KeyboardType.Text,
            imeAction = ImeAction.Next
        ),
        keyboardActions = KeyboardActions(
            onDone = {
                focusManager.clearFocus()
                keyboardController?.hide()
            }
        ),
    )
}

@Composable
fun ColumnScope.PhoneNumberTextFieldAPS(
    keyboardController: SoftwareKeyboardController?,
    focusManager: FocusManager,
    labelText: Int
) {
    var text by remember { mutableStateOf("") }

    TextField(
        value = text,
        onValueChange = {
            text = it
        },
        textStyle = MaterialTheme.typography.displayMedium,
        modifier = Modifier
            .align(Alignment.Start)
            .fillMaxWidth()
            .defaultMinSize(minHeight = 60.dp)
            .wrapContentHeight()
            .border(
                1.dp,
                color = colorResource(id = R.color.gray_border_textfield),
                shape = RoundedCornerShape(16.dp)
            )
            .background(color = colorResource(id = R.color.transparent)),
        shape = RoundedCornerShape(16.dp),
//        placeholder = {
//            Text(
//                text = placeholder,
//                style = MaterialTheme.typography.titleSmall.copy(
//                    color = colorResource(id = R.color.gray_text)
//                )
//            )
//        },
        label = {
            Text(text = stringResource(id = labelText),
                style = MaterialTheme.typography.titleSmall.copy(
                    color = colorResource(id = R.color.gray_text)
                )
            )
        },
//        leadingIcon = {
//            Image(
//                painter = painterResource(id = R.drawable.profile_circle),
//                contentDescription = "Title Logo",
//                modifier = Modifier
//                    .size(24.dp, 24.dp)
//            )
//        },
        colors = TextFieldDefaults.colors(
            focusedLabelColor = colorResource(id = R.color.gray_splash),
            unfocusedContainerColor = colorResource(id = R.color.transparent),
            focusedContainerColor = colorResource(id = R.color.transparent),
            focusedIndicatorColor = colorResource(id = R.color.transparent),
            disabledIndicatorColor = colorResource(id = R.color.transparent),
            unfocusedIndicatorColor = colorResource(id = R.color.transparent),
            cursorColor = colorResource(id = R.color.gray_splash),
        ),
        keyboardOptions = KeyboardOptions(
            keyboardType = KeyboardType.Phone,
            imeAction = ImeAction.Next
        ),
        keyboardActions = KeyboardActions(
            onDone = {
                focusManager.clearFocus()
                keyboardController?.hide()
            }
        ),
    )
}

@Composable
fun BoxScope.SaveButtonABAFS(buttonText: Int) {
    Button(
        modifier = Modifier
            .background(colorResource(id = R.color.transparent))
            .fillMaxWidth()
            .height(60.dp)
            .align(Alignment.BottomCenter)
            .clickable() { },
        onClick = {},
        shape = RoundedCornerShape(15.dp),
//            border = BorderStroke(25.dp, colorResource(id = R.color.black)),
        colors = ButtonDefaults.buttonColors(
            contentColor = colorResource(id = R.color.white),
            containerColor = colorResource(id = R.color.red_login_button),
        ),
    )
    {
        Text(
            text = stringResource(id = buttonText),
            style = MaterialTheme.typography.bodyMedium.copy(
                fontSize = 20.sp,
                color = colorResource(id = R.color.white)
            ),
            textAlign = TextAlign.Center
        )
    }
}

@Composable
fun ColumnScope.NotesTextFieldABAFS(
    keyboardController: SoftwareKeyboardController?,
    focusManager: FocusManager
) {
    var notesText by remember { mutableStateOf("") }

    TextField(
        value = notesText,
        onValueChange = {
            notesText = it
        },
        textStyle = MaterialTheme.typography.displayMedium,
        modifier = Modifier
            .align(Alignment.Start)
            .fillMaxWidth()
            .defaultMinSize(minHeight = 60.dp)
            .wrapContentHeight()
            .border(
                1.dp,
                color = colorResource(id = R.color.gray_border_textfield),
                shape = RoundedCornerShape(16.dp)
            )
            .background(color = colorResource(id = R.color.transparent))
        ,
        shape = RoundedCornerShape(16.dp),
//        placeholder = {
//            Text(
//                text = stringResource(id = R.string.enter_email_address),
//                color = colorResource(id = R.color.gray_splash),
//                style = MaterialTheme.typography.displayMedium
//            )
//        },
        label = {
            Text(text = stringResource(R.string.notes),
                style = MaterialTheme.typography.titleSmall.copy(
                    color = colorResource(id = R.color.gray_text)
                )
            )
        },
//        leadingIcon = {
//            Image(
//                painter = painterResource(id = R.drawable.profile_circle),
//                contentDescription = "Title Logo",
//                modifier = Modifier
//                    .size(24.dp, 24.dp)
//            )
//        },
        colors = TextFieldDefaults.colors(
            focusedLabelColor = colorResource(id = R.color.gray_splash),
            unfocusedContainerColor = colorResource(id = R.color.transparent),
            focusedContainerColor = colorResource(id = R.color.transparent),
            focusedIndicatorColor = colorResource(id = R.color.transparent),
            disabledIndicatorColor = colorResource(id = R.color.transparent),
            unfocusedIndicatorColor = colorResource(id = R.color.transparent),
            cursorColor = colorResource(id = R.color.gray_splash),
        ),
        keyboardOptions = KeyboardOptions(
            keyboardType = KeyboardType.Text,
            imeAction = ImeAction.Default
        ),
        keyboardActions = KeyboardActions(
            onDone = {
                focusManager.clearFocus()
                keyboardController?.hide()
            }
        ),
    )
}