﻿using System;
using System.Collections.Generic;
using ZippyNet.Interfaces;
using System.Text;
using HtmlAgilityPack;

namespace ZippyNet.Html
{
    /// <summary>
    /// Компонент  реализующий  блок  страницы  с  собственным  HTML шаблоном
    /// для  отображении на странице  как  обычного  компонента.
    /// Позволяет отображать на  разных  страницах  типовые элементы
    /// с тем  же содержанием. Напрмер меню, формы  логина и т.д.
    /// Как  правило  используется  блочный тэг типа DIV
    /// 
    /// </summary>
    public class PageFragment : HtmlContainer
    {
        
        public PageFragment(string id)
            : base(id)
        {
        }

        public override void Render()
        {
            var tag = this.getTag();
            string template = WebApplication.app.getTemplate(this.getClassName());
            var d = new HtmlDocument();
            d.LoadHtml(template);

            var body = d.DocumentNode.SelectSingleNode("//body").InnerHtml;
           
            ZippyNet.WebApplication.doc.DocumentNode.ReplaceChild(HtmlNode.CreateNode(body), tag);
       

            this.beforeRender();
            base.RenderImpl();
            this.afterRender();

        }
    public override  void RequestHandle()
    {
         this.beforeRequest();
        base.RequestHandle();
         this.afterRequest();
    }
         
    public void beforeRequest()
    {
        
    }

    
    public void afterRequest()
    {
        
    }

/// <summary>
    /// Возвращает  страницу-владельца
/// </summary>
/// <returns></returns>
    protected WebPage getOwnerPage()
    {
        var owner = this.owner;
          do {
            if (owner is WebPage) {
                return (WebPage)owner;
            }
            owner = this.owner;
        } while (owner != null);

        return null;
    }

    }
}
