package com.example.kliker_xml

import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.os.Bundle
import android.widget.ImageView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class MainActivity : AppCompatActivity() {

    private lateinit var bitmap: Bitmap
    private lateinit var canvas: Canvas
    private lateinit var paint: Paint

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        // metoda statyczna, która tworzy nową instancję obiektu Bitmap.
        // parametry:
        //  szerokość i wysokość bitmapy
        // ARGB_8888 oznacza, że każdy piksel jest reprezentowany przez 4 składowe kolorów:
        // Alfa (A) - przezroczystość, Czerwony (R), Zielony (G), i Niebieski (B),
        // z każdym składnikiem zajmującym 8 bitów (czyli wartości od 0 do 255).
        bitmap = Bitmap.createBitmap(200, 300, Bitmap.Config.ARGB_8888)
        // tworzenie kanwy
        canvas = Canvas(bitmap)

        // referencja do imageView
        val imageView = findViewById<ImageView>(R.id.imageView)

        // Inicjalizacja farby
        paint = Paint().apply {
            isAntiAlias = true
            color = Color.RED // Domyślny kolor owalu
        }

        // Rysowanie owalu na kanwie
        drawOval()

        // Ustaw bitmapę w ImageView
        imageView.setImageBitmap(bitmap)

        // Obsługa kliknięcia na ImageView
        imageView.setOnClickListener {
            changeColor(imageView) // Zmiana koloru owalu
        }
    }

    private fun drawOval() {
        // Rysowanie owalu na kanwie
        canvas.drawColor(Color.TRANSPARENT) // Wyczyszczenie bitmapy przed rysowaniem
        canvas.drawOval(0f, 0f, bitmap.width.toFloat(), bitmap.height.toFloat(), paint)
    }

    private fun changeColor(imageView: ImageView) {

        // Generowanie losowego koloru RGB
        val randomColor = Color.argb(
            255,
            (0..255).random(),
            (0..255).random(),
            (0..255).random()
        )
        paint.color = randomColor // Ustawienie nowego koloru
        drawOval() // Ponowne rysowanie owalu z nowym kolorem
        imageView.setImageBitmap(bitmap) // Ustawienie zaktualizowanej bitmapy
    }
}