import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../providers/auth_provider.dart';
import '../providers/chat_provider.dart';

/// 对话历史列表项
class ConversationListItem {
  final String id;
  final String? title;
  final String? summary;
  final int messageCount;
  final DateTime updatedAt;

  const ConversationListItem({
    required this.id,
    this.title,
    this.summary,
    required this.messageCount,
    required this.updatedAt,
  });

  factory ConversationListItem.fromJson(Map<String, dynamic> json) =>
      ConversationListItem(
        id: json['id']?.toString() ?? '',
        title: json['title']?.toString(),
        summary: json['summary']?.toString(),
        messageCount: (json['messageCount'] as num?)?.toInt() ?? 0,
        updatedAt:
            DateTime.tryParse(json['updatedAt']?.toString() ?? '') ??
            DateTime.now(),
      );
}

/// 对话历史 Notifier：缓存列表，提供刷新/删除/清空。
class ConversationHistoryNotifier
    extends AsyncNotifier<List<ConversationListItem>> {
  @override
  Future<List<ConversationListItem>> build() {
    return _fetch();
  }

  Future<List<ConversationListItem>> _fetch() async {
    final api = ref.read(apiClientProvider);
    final res = await api.get('/api/ai/conversations');
    final raw = (res.data['data'] as List?) ?? const [];
    return raw
        .whereType<Map>()
        .map((m) => ConversationListItem.fromJson(Map<String, dynamic>.from(m)))
        .toList();
  }

  Future<void> refresh() async {
    state = const AsyncValue.loading();
    state = await AsyncValue.guard(_fetch);
  }

  /// 删除单条；后端确认成功后再更新 UI。
  Future<void> deleteOne(String id) async {
    final previous = state.asData?.value ?? const <ConversationListItem>[];
    final api = ref.read(apiClientProvider);
    await api.delete('/api/ai/conversations/$id');
    state = AsyncValue.data(previous.where((e) => e.id != id).toList());
    // 同步清掉当前 chat state（如果删的就是当前会话）
    final chat = ref.read(chatProvider);
    if (chat.conversationId == id) {
      await ref.read(chatProvider.notifier).resetSession();
    }
  }

  /// 一键清空当前用户的全部对话。
  Future<int> clearAll() async {
    final api = ref.read(apiClientProvider);
    final res = await api.delete('/api/ai/conversations');
    state = const AsyncValue.data([]);
    await ref.read(chatProvider.notifier).resetSession();
    final deleted = res.data['data']?['deleted'];
    return deleted is num ? deleted.toInt() : 0;
  }
}

final conversationHistoryProvider =
    AsyncNotifierProvider<
      ConversationHistoryNotifier,
      List<ConversationListItem>
    >(ConversationHistoryNotifier.new);
