import '../task.dart';

// Confirmation Task
class ConfirmationTask extends Task {
  final String buttonText;

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

  factory ConfirmationTask.fromJson(Map<String, dynamic> json) {
    final commonProps = Task.parseCommonProperties(json);
    final taskSpecificData = json['taskSpecificData'] as Map<String, dynamic>;
    final buttonText =
        taskSpecificData['buttonText']?.toString() ?? 'Bestätigen';

    return ConfirmationTask(
      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'],
      buttonText: buttonText,
    );
  }

  @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': 'CONFIRMATION',
        'title': title,
        'buttonText': buttonText,
      },
    };
  }

  @override
  ConfirmationTask copyWith({
    String? id,
    String? jobId,
    int? stationOrder,
    bool? completed,
    bool? optional,
    DateTime? completedAt,
    String? completedBy,
    int? taskOrder,
    String? title,
    String? description,
    String? displayName,
    String? buttonText,
  }) {
    return ConfirmationTask(
      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,
      buttonText: buttonText ?? this.buttonText,
    );
  }
}
