import 'dart:async'; import 'package:flutter/material.dart'; import 'package:aves/model/entry/entry.dart'; import 'package:aves/services/common/services.dart'; /// Funzioni di editing sugli entry. /// Versione ultra‑ottimizzata, senza album, senza grouping, senza filter_grids. /// Tutta logica pura, nessun dialog. class EntryActionEdit { // ------------------------------------------------------------ // ROTATE // ------------------------------------------------------------ static Future rotateCW( BuildContext context, List entries, ) async { for (final entry in entries) { try { await mediaEditService.rotate(entry, clockwise: true); } catch (e) { _show(context, 'Errore rotazione: $e'); } } } static Future rotateCCW( BuildContext context, List entries, ) async { for (final entry in entries) { try { await mediaEditService.rotate(entry, clockwise: false); } catch (e) { _show(context, 'Errore rotazione: $e'); } } } // ------------------------------------------------------------ // FLIP // ------------------------------------------------------------ static Future flip( BuildContext context, List entries, ) async { for (final entry in entries) { try { await mediaEditService.flip(entry); } catch (e) { _show(context, 'Errore flip: $e'); } } } // ------------------------------------------------------------ // METADATA (logica pura, i dialog sono nel file 3) // ------------------------------------------------------------ static Future editDate( BuildContext context, List entries, int? newDateMillis, ) async { if (newDateMillis == null) return; for (final entry in entries) { try { await mediaEditService.editDate(entry, newDateMillis); } catch (e) { _show(context, 'Errore modifica data: $e'); } } } static Future editLocation( BuildContext context, List entries, double? lat, double? lon, ) async { if (lat == null || lon == null) return; for (final entry in entries) { try { await mediaEditService.editLocation(entry, lat, lon); } catch (e) { _show(context, 'Errore modifica posizione: $e'); } } } static Future editTitleDescription( BuildContext context, List entries, String? title, String? description, ) async { for (final entry in entries) { try { await mediaEditService.editTitleDescription( entry, title: title, description: description, ); } catch (e) { _show(context, 'Errore modifica titolo/descrizione: $e'); } } } static Future editRating( BuildContext context, List entries, int? rating, ) async { if (rating == null) return; for (final entry in entries) { try { await mediaEditService.editRating(entry, rating); } catch (e) { _show(context, 'Errore modifica rating: $e'); } } } static Future editTags( BuildContext context, List entries, Set tags, ) async { for (final entry in entries) { try { await mediaEditService.editTags(entry, tags); } catch (e) { _show(context, 'Errore modifica tag: $e'); } } } static Future removeMetadata( BuildContext context, List entries, ) async { for (final entry in entries) { try { await mediaEditService.removeMetadata(entry); } catch (e) { _show(context, 'Errore rimozione metadata: $e'); } } } // ------------------------------------------------------------ // UTILS // ------------------------------------------------------------ static void _show(BuildContext context, String msg) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(msg)), ); } }