using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication2.Models;

namespace WebApplication2.Controllers
{
    public class LikeAndDisLikesController : Controller
    {
        private CMS_DBEntities db = new CMS_DBEntities();

        public ActionResult Index()
        {
         
   
            return View(db.News.ToList());

     
        }
        #region Like Method
        /// <summary>
        /// متد لایک که بررسی میکند اگر  کاربری با این
        ///  وارد شده است یک پیام  به کاربر نشان میدهد و اجازه نمیدهد لایک کند IP   
        ///  
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Likes(int id)
        {
            if (!User_Validate(id))
            {
                
                ViewBag.Message = "<script> humane.log('شما قبلا رای داده اید  ')</script>";
                return View("Index", db.News.ToList());
            }

            else
            {
                News news = db.News.Find(id);
                news.Likes++;
                db.SaveChanges();
                return RedirectToAction("Index", db.News.ToList());

            }



        }
        public ActionResult DisLikes(int id)
        {
            if (!User_Validate(id))
            {

                ViewBag.Message = "<script> humane.log('شما قبلا رای داده اید  ')</script>";
                return View("Index", db.News.ToList());
            }

            else
            {
                News news = db.News.Find(id);
                news.dislike++;
                db.SaveChanges();
                return RedirectToAction("Index", db.News.ToList());

            }



        }
        #endregion

        #region Check Users IP
        /// <summary>
        /// چک کردن IP کاربر
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>


        private bool User_Validate(int id)
        {

            return (Get_User_Ip_Db(id) == Get_User_Ip()) ? false : true;

        }

        private string Get_User_Ip()
        {
            if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
            {
                return Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            }
            else
            {
                return Request.ServerVariables["REMOTE_ADDR"];

            }
        }

        private string Get_User_Ip_Db(int id)
        {
            if (db.Likes.Any(m => m.NewsID == id))
            {
                var ip = db.Likes.First(m => m.NewsID == id).UserIP;
                return ip;
            }

            else
            {
                News news = db.News.Find(id);



                Models.Likes likes = new Likes()
                {
                    Date = DateTime.Now,
                    NewsID = id,
                    UserIP = Get_User_Ip(),

                };
                db.Likes.Add(likes);

                db.SaveChanges();

            }
            return "";
        }
        #endregion
    }
}