import android.content.ContentUris
import android.database.Cursor
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.text.format.DateFormat
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_content_provider_sample.*
import java.util.*

class ContentProviderSample : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_content_provider_sample)

        try {
            val cursor:Cursor = getImage()
            if (cursor.moveToFirst()) {
                // 1. 각 칼럼의 열 인덱스 얻기
                val idColNum = cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns._ID)
                val titleColNum = cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.TITLE)
                val dateTakenColNum = cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATE_TAKEN)

                // 2. 인덱스를 바탕으로 데이터를 Cursor로부터 얻기
                val id = cursor.getLong(idColNum)
                val title = cursor.getString(titleColNum)
                val dateTaken = cursor.getLong(dateTakenColNum)
                val imageUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id)

                // 3. 데이터를 View로 설정
                val calendar = Calendar.getInstance()
                calendar.timeInMillis = dateTaken
                val text = DateFormat.format("yyyy/MM/dd(E) kk:mm:ss", calendar).toString()
                textView_provider_sample.setText("촬영일시: " + text)
                imageView_provider_sample.setImageURI(imageUri)
            }
            cursor.close()
        } catch (e: SecurityException) {
            Toast.makeText(this, "스토리지에 접근 권한을 허가로 해주세요.(종료합니다)", Toast.LENGTH_SHORT).show()
            finish()
        }
    }

    private fun getImage(): Cursor {
        val contentResolver = contentResolver
        var queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
        // 가져올 칼럼명
        val projection = arrayOf(
            MediaStore.Images.ImageColumns._ID,
            MediaStore.Images.ImageColumns.TITLE,
            MediaStore.Images.ImageColumns.DATE_TAKEN)

        // 정렬
        val sortOrder = MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC"
        queryUri = queryUri.buildUpon().appendQueryParameter("limit", "1").build()

        return contentResolver.query(queryUri, projection, null, null, sortOrder)
    }
}