// Esta guía funciona offline. El chat con IA (mascota) es la capa extra cuando hay conexión — ver features/mascota/
import 'package:flutter/material.dart';

class SeparationGuide {
  final String version;
  final List<Category> categorias;

  SeparationGuide({required this.version, required this.categorias});

  factory SeparationGuide.fromJson(Map<String, dynamic> json) {
    return SeparationGuide(
      version: json['version'],
      categorias: (json['categorias'] as List)
          .map((category) => Category.fromJson(category))
          .toList(),
    );
  }
}

class Category {
  final String id;
  final String nombre;
  final String color;
  final String icono;
  final String descripcion;
  final List<Example> ejemplos;
  final String consejo;

  Category({
    required this.id,
    required this.nombre,
    required this.color,
    required this.icono,
    required this.descripcion,
    required this.ejemplos,
    required this.consejo,
  });

  factory Category.fromJson(Map<String, dynamic> json) {
    return Category(
      id: json['id'],
      nombre: json['nombre'],
      color: json['color'],
      icono: json['icono'],
      descripcion: json['descripcion'],
      ejemplos: (json['ejemplos'] as List)
          .map((example) => Example.fromJson(example))
          .toList(),
      consejo: json['consejo'],
    );
  }

  IconData get iconData {
    switch (icono) {
      case 'eco':
        return Icons.eco;
      case 'recycling':
        return Icons.recycling;
      case 'delete':
        return Icons.delete;
      case 'warning':
        return Icons.warning;
      default:
        return Icons.help;
    }
  }

  Color get colorValue {
    return Color(int.parse(color.substring(1, 7), radix: 16) + 0xFF000000);
  }
}

class Example {
  final String nombre;
  final bool acepta;
  final String? razon;

  Example({required this.nombre, required this.acepta, this.razon});

  factory Example.fromJson(Map<String, dynamic> json) {
    return Example(
      nombre: json['nombre'],
      acepta: json['acepta'],
      razon: json['razon'],
    );
  }
}
