import 'package:flutter/material.dart';

import 'package:flustars/flustars.dart';
import 'package:json_annotation/json_annotation.dart';

import 'package:aku_community/base/base_style.dart';

part 'facility_appointment_model.g.dart';

@JsonSerializable()
class FacilityAppointmentModel {
  final int id;
  final String code;
  final String facilitiesName;

  ///预约状态
  ///* 1.未签到(预约时间前30分钟显示扫码签到，之前为取消预约)，
  ///* 2.已签到
  ///* 3.已作废
  ///* 4.已取消
  ///* 5.已结束
  final int status;
  final String address;
  final String appointmentStartDate;
  final String appointmentEndDate;
  final String? nullifyReason;
  final String? useEndDate;

  DateTime? get appointmentStart => DateUtil.getDateTime(appointmentStartDate);
  DateTime? get appointmentEnd => DateUtil.getDateTime(appointmentEndDate);

  String get displayDate {
    return '${DateUtil.formatDate(
      appointmentStart,
      format: 'yyyy-MM-dd HH:mm',
    )}-${DateUtil.formatDate(
      appointmentEnd,
      format: 'HH:mm',
    )}';
  }

  Color get statusColor {
    switch (status) {
      case 1:
        return kPrimaryColor;
      case 2:
        return Color(0xFF2576E5);
      case 3:
        return Color(0xFFFB4702);
      case 4:
        return Color(0xFF999999);
      case 5:
        return Color(0xFF999999);
      default:
        return Color(0xFF999999);
    }
  }

  String get statusValue {
    switch (status) {
      case 1:
        return '预约成功';
      case 2:
        return '签到成功';
      case 3:
        return '预约作废';
      case 4:
        return '已取消';
      case 5:
        return '已结束';
      default:
        return '未知状态';
    }
  }

  FacilityAppointmentModel({
    required this.id,
    required this.code,
    required this.facilitiesName,
    required this.status,
    required this.address,
    required this.appointmentStartDate,
    required this.appointmentEndDate,
    required this.nullifyReason,
    required this.useEndDate,
  });

  factory FacilityAppointmentModel.fromJson(Map<String, dynamic> json) =>
      _$FacilityAppointmentModelFromJson(json);
}
