@startuml
skinparam sequenceArrowThickness 2
skinparam roundcorner 20
skinparam sequenceParticipant underline

!pragma teoz true


box "presentation/mobilepay/"
box "receipt"
participant "MobilePayTransactionReceiptPrintHandler.kt" as MPTRPH
end box
participant "MobilePayActivity.kt" as MPA
participant "MobilePayViewModel.kt" as MPVM
end box

box "framework"
box "/datasource/app/"
participant "MobilePaymentDataSourceImpl.kt" as MPDSI
end box
end box

activate MPA
MPA -> MPVM: prepareNfcData[activity]
activate MPVM
MPVM -[#green]> MPVM: Start timer
activate MPVM #darksalmon
MPVM -[#green]> MPVM : Wait for nfc data
MPVM -> MPDSI : [Stop timer]\ndecodeNfcData(nfcData)
activate MPDSI
MPVM -[#green]> MPVM: Timer finished
MPVM -[#blue]-> MPA: Send timer status
destroy MPVM
MPA -[#green]> MPA: Display message
destroy MPA
MPDSI -[#green]> MPDSI: Decode nfc data
alt successful case
MPDSI -[#blue]-> MPVM: Send\n/domain/usecase/mobile/request/MobilePayGenerateRequest.kt
else some kind of failure
MPDSI -[#red]-> MPVM: Error Data parsing
activate MPA
MPVM -[#red]-> MPA: Set error message
MPA -[#red]> MPA: Display message
destroy MPA
end
MPVM -> MPDSI: prepareMobilePayRequest(/domain/usecase/mobile/request/MobilePayGenerateRequest.kt)
MPDSI -[#green]> MPDSI: Set request data
MPDSI -[#blue]-> MPVM: Send\n/domain/usecase/mobile/request/MobilePayStatusRequest.kt
MPVM -> MPDSI: requestMobilePaymentTransaction(/domain/usecase/mobile/request/MobilePayStatusRequest.kt)
MPDSI -[#green]> MPDSI: Post generated\nrequest to nfc\npayment api
alt successful case
MPDSI -[#blue]-> MPVM: Send\n/domain/usecase/mobile/response/MobilePaymentTransactionResponse.kt
else some kind of failure
MPDSI -[#red]-> MPVM: Error response from api
activate MPA
MPVM -[#red]-> MPA: Set error message
MPA -[#red]> MPA: Display message
destroy MPA
end
MPVM -> MPDSI: checkMobilePaymentStatus(/domain/usecase/mobile/response/MobilePaymentTransactionResponse.kt)
MPDSI -[#green]> MPDSI: Check for \npayment status
alt successful case
MPDSI -[#blue]-> MPVM: Send\n/domain/usecase/mobile/response/MobilePaymentTransactionResponse.kt
activate MPTRPH
MPVM -> MPTRPH: PrintPaymentReceipt(/domain/usecase/mobile/response/MobilePaymentTransactionResponse.kt)
destroy MPDSI
destroy MPTRPH
else some kind of failure
MPDSI -[#red]-> MPVM: Error response from api
activate MPA
MPVM -[#red]-> MPA: Set error message
MPA -[#red]> MPA: Display message
destroy MPVM
destroy MPA

@enduml