import 'package:flutter/material.dart'; import 'package:tugas_akhir_supabase/domain/entities/crop_schedule.dart'; class CropScheduleModel extends CropSchedule { const CropScheduleModel({ required String id, required String cropName, required DateTime startDate, required DateTime endDate, required int plot, required String? fieldId, String? status, String? notes, required Color color, }) : super( id: id, cropName: cropName, startDate: startDate, endDate: endDate, plot: plot, fieldId: fieldId, status: status, notes: notes, color: color, ); factory CropScheduleModel.fromJson(Map json) { DateTime parseDate(dynamic value) { if (value is String) return DateTime.tryParse(value) ?? DateTime(2000); if (value is DateTime) return value; return DateTime(2000); } return CropScheduleModel( id: json['id'] as String, cropName: json['crop_name'] ?? 'Tanaman', startDate: parseDate(json['start_date']), endDate: parseDate(json['end_date']), plot: json['plot'] is int ? json['plot'] : int.tryParse(json['plot'].toString()) ?? 0, fieldId: json['field_id'], status: json['status'], notes: json['notes'], color: CropSchedule.generateColor(json['id'] as String), ); } Map toJson() { return { 'id': id, 'crop_name': cropName, 'start_date': startDate.toIso8601String(), 'end_date': endDate.toIso8601String(), 'plot': plot, 'field_id': fieldId, 'status': status, 'notes': notes, }; } factory CropScheduleModel.fromEntity(CropSchedule entity) { return CropScheduleModel( id: entity.id, cropName: entity.cropName, startDate: entity.startDate, endDate: entity.endDate, plot: entity.plot, fieldId: entity.fieldId, status: entity.status, notes: entity.notes, color: entity.color, ); } }