import '../task.dart';

// Comment Task
class CommentTask extends Task {
  final String commentText;
  final bool required;

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

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

    return CommentTask(
      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'],
      commentText: taskSpecificData['commentText'] ?? '',
      required: taskSpecificData['required'] ?? false,
    );
  }

  @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': 'COMMENT',
        'title': title,
        'commentText': commentText,
        'required': required,
      },
    };
  }

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