import 'package:sqflite/sqflite.dart'; import 'package:worldhopper/database/database.dart'; import 'package:worldhopper/database/tables/series_reading_mode_table.dart'; import 'package:worldhopper/providers/reading_mode_provider.dart'; /// Repository for managing per-series reading mode overrides class SeriesReadingModeRepository { final DatabaseHelper _dbHelper; SeriesReadingModeRepository({DatabaseHelper? dbHelper}) : _dbHelper = dbHelper ?? DatabaseHelper.instance; /// Get database instance Future get _db async => await _dbHelper.database; /// Get the reading mode override for a series, or null if none set. /// Updates last_accessed_at when a row is found. Future getReadingMode(String seriesFeedUrl) async { final db = await _db; final List> maps = await db.query( SeriesReadingModeTable.tableName, where: 'series_feed_url = ?', whereArgs: [seriesFeedUrl], ); if (maps.isEmpty) return null; // Update last_accessed_at await db.update( SeriesReadingModeTable.tableName, {'last_accessed_at': DateTime.now().toUtc().toIso8601String()}, where: 'series_feed_url = ?', whereArgs: [seriesFeedUrl], ); final modeString = maps.first['reading_mode'] as String; return ReadingMode.values.firstWhere( (m) => m.name == modeString, orElse: () => ReadingMode.ltr, ); } /// Set (insert or update) the reading mode override for a series. /// Preserves created_at on updates. Future setReadingMode(String seriesFeedUrl, ReadingMode mode) async { final db = await _db; final now = DateTime.now().toUtc().toIso8601String(); await db.rawInsert(''' INSERT INTO ${SeriesReadingModeTable.tableName} (series_feed_url, reading_mode, created_at, last_accessed_at) VALUES (?, ?, ?, ?) ON CONFLICT(series_feed_url) DO UPDATE SET reading_mode = excluded.reading_mode, last_accessed_at = excluded.last_accessed_at ''', [seriesFeedUrl, mode.name, now, now]); } /// Delete the reading mode override for a series Future deleteReadingMode(String seriesFeedUrl) async { final db = await _db; await db.delete( SeriesReadingModeTable.tableName, where: 'series_feed_url = ?', whereArgs: [seriesFeedUrl], ); } }