import '../task.dart';

// Signature Task
class SignatureTask extends Task {
  final String? note;

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

  factory SignatureTask.fromJson(Map<String, dynamic> json) {
    final commonProps = Task.parseCommonProperties(json);

    String? note;
    final taskSpecificData = json['taskSpecificData'];
    if (taskSpecificData is Map<String, dynamic>) {
      final n = taskSpecificData['note'];
      if (n is String) note = n;
    }

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

  @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': 'SIGNATURE',
        'title': title,
        'note': note,
      },
    };
  }

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