import 'dart:io';

import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';

const double photoSize = 100;

class ReferencePhoto extends StatelessWidget {
  Reference? ref;
  double size;
  double sizeCircle;
  ReferencePhoto(
      {super.key,
      required this.ref,
      this.size = photoSize,
      this.sizeCircle = photoSize});

  Future<Widget> downloadImage() async {
    try {
      if (ref != null) {
        final imageData = await ref!.getData();
        if (imageData != null) {
          return ClipOval(
            child: Image.memory(
              imageData,
              width: size,
              height: size,
              fit: BoxFit.cover,
            ),
          );
        }
      }
      // ignore: empty_catches
    } catch (e) {}

    return DefaultPhoto(sizeDefault: sizeCircle);
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<Widget>(
        future: downloadImage(),
        builder: (BuildContext context, AsyncSnapshot<Widget> snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            // mientras la llamada asíncrona está en proceso, muestra un mensaje de carga
            return const SizedBox(
                width: photoSize,
                height: photoSize,
                child: Center(
                  child: CircularProgressIndicator(),
                ));
          } else if (snapshot.connectionState == ConnectionState.done &&
              snapshot.hasData) {
            return snapshot.data!;
          } else {
            return DefaultPhoto();
          }
        });
  }
}

class DefaultPhoto extends StatelessWidget {
  double sizeDefault;
  DefaultPhoto({super.key, this.sizeDefault = photoSize});

  @override
  Widget build(BuildContext context) {
    return Container(
      width: sizeDefault,
      height: sizeDefault,
      decoration: BoxDecoration(
        color: const Color(0xFF2BA4EC),
        borderRadius: BorderRadius.circular(50),
      ),
      child: const Icon(
        Icons.person,
        color: Color.fromARGB(255, 255, 255, 255),
        size: 55,
      ),
    );
  }
}

class LocalPhoto extends StatelessWidget {
  File file;
  LocalPhoto({super.key, required this.file});

  @override
  Widget build(BuildContext context) {
    return ClipOval(
      child: Image.file(
        file,
        width: photoSize,
        height: photoSize,
        fit: BoxFit.cover,
      ),
    );
  }
}
