package com.syncflow.data.db

import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.syncflow.data.db.entities.*

@Database(
    entities = [
        CloudAccountEntity::class,
        SyncPairEntity::class,
        SyncFileStateEntity::class,
        SyncConflictEntity::class,
        SyncEventEntity::class,
    ],
    version = 3,
    exportSchema = true,
)
@TypeConverters(DbConverters::class)
abstract class SyncDatabase : RoomDatabase() {

    companion object {
        // Wipe file states: timestamps were stored as epoch-seconds, now epoch-millis.
        // All previously saved states are wrong so we drop and re-learn on next sync.
        val MIGRATION_2_3 = object : Migration(2, 3) {
            override fun migrate(db: SupportSQLiteDatabase) {
                db.execSQL("DELETE FROM sync_file_states")
            }
        }
    }
    abstract fun cloudAccountDao(): CloudAccountDao
    abstract fun syncPairDao(): SyncPairDao
    abstract fun syncFileStateDao(): SyncFileStateDao
    abstract fun syncConflictDao(): SyncConflictDao
    abstract fun syncEventDao(): SyncEventDao
}
