import '../task.dart';

// TodoList Task
class TodoListTask extends Task {
  final List<String> todoItems;

  TodoListTask({
    required super.id,
    required super.jobId,
    required this.todoItems,
    super.stationOrder,
    super.completed = false,
    super.optional = false,
    super.completedAt,
    super.completedBy,
    super.taskOrder,
    super.title,
    super.description,
    super.displayName,
  });

  factory TodoListTask.fromJson(Map<String, dynamic> json) {
    final commonProps = Task.parseCommonProperties(json);
    final taskSpecificData = json['taskSpecificData'] as Map<String, dynamic>;

    final rawItems = taskSpecificData['todoItems'] as List? ?? [];
    final todoItems = rawItems.map((item) => item?.toString() ?? '').toList();

    return TodoListTask(
      id: commonProps['id'],
      jobId: commonProps['jobId'],
      stationOrder: commonProps['stationOrder'],
      completed: commonProps['completed'],
      optional: commonProps['optional'],
      completedAt: commonProps['completedAt'],
      completedBy: commonProps['completedBy'],
      taskOrder: commonProps['taskOrder'],
      title: commonProps['title'],
      description: commonProps['description'],
      displayName: commonProps['displayName'],
      todoItems: todoItems,
    );
  }

  @override
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'jobId': jobId,
      'stationOrder': stationOrder,
      'completed': completed,
      'optional': optional,
      'completedAt': completedAt?.toIso8601String(),
      'completedBy': completedBy,
      'taskOrder': taskOrder,
      'description': description,
      'displayName': displayName,
      'taskSpecificData': {
        'taskType': 'TODOLIST',
        'title': title,
        'todoItems': todoItems,
      },
    };
  }

  @override
  TodoListTask copyWith({
    String? id,
    String? jobId,
    int? stationOrder,
    bool? completed,
    bool? optional,
    DateTime? completedAt,
    String? completedBy,
    int? taskOrder,
    String? title,
    String? description,
    String? displayName,
    List<String>? todoItems,
  }) {
    return TodoListTask(
      id: id ?? this.id,
      jobId: jobId ?? this.jobId,
      stationOrder: stationOrder ?? this.stationOrder,
      completed: completed ?? this.completed,
      optional: optional ?? this.optional,
      completedAt: completedAt ?? this.completedAt,
      completedBy: completedBy ?? this.completedBy,
      taskOrder: taskOrder ?? this.taskOrder,
      title: title ?? this.title,
      description: description ?? this.description,
      displayName: displayName ?? this.displayName,
      todoItems: todoItems ?? this.todoItems,
    );
  }
}
