using Models;
using System.Diagnostics;
using System.Runtime.Serialization;
using System.Xml;


namespace LOLAPP.DataContractPersistance
{
    public class DataContract : IPersistanceManager
    {
        public string FilePath { get; set; } = FileSystem.Current.AppDataDirectory;
        public string FileNameC { get; set; } = "championsSave.xml";
        public string FileNameU { get; set; } = "utilisateurSave.xml";

        public (List<Champion>, List<Utilisateur>) Chargdon()
        {
            var champserializer = new DataContractSerializer(typeof(DataToPersist));
            var utilserializer = new DataContractSerializer(typeof(List<Utilisateur>));
            List<Utilisateur> util = new List<Utilisateur>();
            List<Champion> champ = new List<Champion>();
            DataToPersist data;

            if (File.Exists(Path.Combine(FilePath, FileNameC))) // Vérifiez si le fichier existe
            {
                using (Stream champstream = File.OpenRead(Path.Combine(FilePath, FileNameC))) 
                { 
                    data = champserializer.ReadObject(champstream) as DataToPersist;
                    champ = data.champ; 
                }
            }
            else
            {
                data = new DataToPersist(); // Si le fichier n'existe pas, créez une nouvelle liste
            }

            if (File.Exists(Path.Combine(FilePath, FileNameU))) // Vérifiez si le fichier existe
            {
                using (Stream utilstream = File.OpenRead(Path.Combine(FilePath, FileNameU)))
                {
                    util = utilserializer.ReadObject(utilstream) as List<Utilisateur>;
                }
            }
            else
            {
                util = new List<Utilisateur>(); // Si le fichier n'existe pas, créez une nouvelle liste
            }
            return (champ, util);
        }

        public void Sauvdon(List<Utilisateur> s, List<Champion> c)
        {
            var serializer = new DataContractSerializer(typeof(DataToPersist),  
                new DataContractSerializerSettings()
                {
                    PreserveObjectReferences = true
                }
                );
            if (!Directory.Exists(FilePath))
            {
                Debug.WriteLine("Directory crée à l'instant");
                Debug.WriteLine(Directory.GetDirectoryRoot(FileNameC));
                Debug.WriteLine(FilePath);
                Directory.CreateDirectory(FilePath);
            }

            DataToPersist data = new DataToPersist();
            data.util = s;
            data.champ = c;
            var settings = new XmlWriterSettings() { Indent = true };
            using (TextWriter st = File.CreateText(Path.Combine(FilePath, FileNameC)))
            {
                using (XmlWriter writer = XmlWriter.Create(st, settings))
                {
                    serializer.WriteObject(writer, data);
                }
            }
        }

        /*Méthode permettant de sauvegarder les données*/
        public void Sauvdon(List<Champion> c, List<Utilisateur> u)
        {
            var champserializer = new DataContractSerializer(typeof(DataToPersist));
            var utilserializer = new DataContractSerializer(typeof(List<Utilisateur>));

            if (!Directory.Exists(FilePath))
            {
                Debug.WriteLine("Directory créé à l'instant");
                Debug.WriteLine(Directory.GetDirectoryRoot(FilePath));
                Debug.WriteLine(FilePath);
                Directory.CreateDirectory(FilePath);
            }

            DataToPersist data = new DataToPersist();
            data.champ= c;

            using (Stream champstream = File.Create(Path.Combine(FilePath, FileNameC)))
            {
                champserializer.WriteObject(champstream,data);
            }

            using (Stream utilstream = File.Create(Path.Combine(FilePath, FileNameU)))
            {
                utilserializer.WriteObject(utilstream, u);
            }
        }
    }
}
