import pandas as pd
from pm4py.objects.conversion.log import converter as log_converter
from pm4py.algo.discovery.alpha import algorithm as alpha_miner
from pm4py.visualization.petri_net import visualizer as pn_visualizer
from pm4py.objects.log.util import dataframe_utils
from pm4py.objects.conversion.log import converter as log_converter
from pm4py.algo.discovery.alpha import algorithm as alpha_miner
from pm4py.visualization.petri_net import visualizer as pn_visualizer
from pm4py.visualization.petri_net.util import performance_map 

# csv_filename='Insurance_claims_event_log.csv'
# csv_filename='Business Travel Permits.csv'
# csv_filename='Parent-Child Union Output.csv'
csv_filename='PM4PY_Dummy_Event_Log_100_Cases_pm4py.csv'
# csv_filename='PM4Py_Dummy_Event_Log-congested-business-process.csv'

# 1. Load CSV event log
df = pd.read_csv(csv_filename)
# df = pd.read_csv(csv_filename,sep=';')
# print(df.head()) 

# Step 2: Pastikan kolom sesuai PM4Py format
df.columns = ['case_id', 'concept:name', 'timestamp']
df['timestamp'] = pd.to_datetime(df['timestamp'])

# Step 3: Konversi ke Event Log
df = dataframe_utils.convert_timestamp_columns_in_df(df)
from pm4py.objects.log.importer.pandas import importer as pandas_importer
log = pandas_importer.apply(df)

# Step 4: Buat Directly-Follows Graph (DFG)
dfg = dfg_discovery.apply(log)

# Step 5: Visualisasi DFG
dfg_vis = dfg_visualization.apply(dfg, log=log, variant=dfg_visualization.Variants.FREQUENCY)
dfg_visualization.view(dfg_vis)

# Step 6: Hitung Performance Spectrum (Durasi antar aktivitas)
ps = performance_spectrum.apply(log) 

# Step 7: Visualisasi Bottleneck (Waktu antar aktivitas)
performance_spectrum.visualize(ps)

