using CommunityToolkit.Mvvm.ComponentModel;
using LSFE.MobApp.Entities.Location;
using SQLite;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace LSFE.MobApp.Entities.Doctor
{
    [Table("DoctorBackup")]
    public class DoctorBackup : SyncEntity, INotifyPropertyChanged
    {
        private int _doctorId;
        private string? _firstName;
        private string? _lastName;
        private string? _specialization;
        private string? _middleInitial;
        private int _institutionId;
        private string? _institutionName; 
        private string? _emailAddress;
        private string? _phoneNo;
        private string? _address;
        private string? _licenseNo;
        private bool _isActive = true;
        private byte _maxVisit;
        private byte _specializationId;
        private byte _stageLevelId;
        private byte _status;
        private string? _userId;
        private string? _stageLevelName;
        private DateTime _createdDate = DateTime.Now;
        private DateTime _birthDate = DateTime.Now;
        [PrimaryKey]
        public Guid Id { get; set; } = Guid.NewGuid();

        [Column("DoctorId"), NotNull]
        public int DoctorId
        {
            get => _doctorId;
            set
            {
                _doctorId = value;
                OnPropertyChanged();
            }
        }

        public string? FirstName
        {
            get => _firstName;
            set
            {
                _firstName = value;
                OnPropertyChanged();
            }
        }
        public string? LastName
        {
            get => _lastName;
            set
            {
                _lastName = value;
                OnPropertyChanged();
            }
        }
        public string? MiddleInitial
        {
            get => _middleInitial;
            set
            {
                _middleInitial = value;
                OnPropertyChanged();
            }
        }
        public string? Specialization
        {
            get => _specialization;
            set
            {
                _specialization = value;
                OnPropertyChanged();
            }
        }
        public string? EmailAddress
        {
            get => _emailAddress;
            set
            {
                _emailAddress = value;
                OnPropertyChanged();
            }
        }
        public string? PhoneNo
        {
            get => _phoneNo;
            set
            {
                _phoneNo = value;
                OnPropertyChanged();
            }
        }
        public string? Address
        {
            get => _address;
            set
            {
                _address = value;
                OnPropertyChanged();
            }
        }
        public string? LicenseNo
        {
            get => _licenseNo;
            set
            {
                _licenseNo = value;
                OnPropertyChanged();
            }
        }
        public DateTime BirthDate
        {
            get => _birthDate;
            set
            {
                _birthDate = value;
                OnPropertyChanged();
            }
        }
        public byte MaxVisit
        {
            get => _maxVisit;
            set
            {
                _maxVisit = value;
                OnPropertyChanged();
            }
        }
        public byte SpecializationId
        {
            get => _specializationId;
            set
            {
                _specializationId = value;
                OnPropertyChanged();
            }
        }
        public byte StageLevelId
        {
            get => _stageLevelId;
            set
            {
                _stageLevelId = value;
                OnPropertyChanged();
            }
        }
        public int InstitutionId
        {
            get => _institutionId;
            set
            {
                _institutionId = value;
                OnPropertyChanged();
            }
        }
        public byte Status
        {
            get => _status;
            set
            {
                _status = value;
                OnPropertyChanged();
            }
        }
        public string? UserId
        {
            get => _userId;
            set
            {
                _userId = value;
                OnPropertyChanged();
            }
        }

        [Ignore] 
        public string? StageLevelName
        {
            get => _stageLevelName;
            set
            {
                _stageLevelName = value;
                OnPropertyChanged();
            }
        }

       

        [Ignore] // This won't be stored, just for query results
        public string? InstitutionName
        {
            get => _institutionName;
            set
            {
                _institutionName = value;
                OnPropertyChanged();
            }
        }

        public bool IsActive
        {
            get => _isActive;
            set
            {
                _isActive = value;
                OnPropertyChanged();
            }
        }

        public DateTime CreatedDate
        {
            get => _createdDate;
            set
            {
                _createdDate = value;
                OnPropertyChanged();
            }
        }
    }
}