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

part 'base_model.g.dart';

@JsonSerializable()
class BaseModel<T> {
  int code;
  String msg;
  dynamic data;
  BaseModel({
    required this.code,
    required this.msg,
    this.data,
  });



  List<T> map(T Function(dynamic json) f) {
    if (data == null) return [];
    return (data! as List<T>).map(f).toList();
  }

  factory BaseModel.unknown() => BaseModel(
    code: -1,
    msg: 'UNKNOW FAIL',
  );

  factory BaseModel.dioErr(DioError err) => BaseModel(
    code: err.response?.statusCode ?? -1,
    msg: err.message,
  );

  factory BaseModel.fromJson(Map<String, dynamic> json) =>
      _$BaseModelFromJson(json) as BaseModel<T>;
}