using EgwCoreLib.Razor;
using Microsoft.AspNetCore.Components;
using Newtonsoft.Json.Linq;
using System;
using WebWindowComplex.Models;
using static WebWindowComplex.Json.WindowConst;
namespace WebWindowComplex.Compo
{
public partial class AreaSash
{
#region Public Properties
///
/// Sash group corrente
///
[CascadingParameter(Name = "CurrSashGroup")]
public Sash CurrSashGroup { get; set; } = null!;
///
/// Sash dimension corrente
///
[Parameter]
public SashDimension CurrSashDim { get; set; } = null!;
/////
///// Lista di ante che si stanno editando
/////
//[Parameter]
//public List SashDimEditList { get; set; } = null!;
///
/// Lista delle sash
///
[CascadingParameter(Name = "SashGroupList")]
public List SashGroupList { get; set; } = null!;
///
/// Livello di accesso (utente base)
///
[CascadingParameter(Name = "User")]
public bool User { get; set; } = false!;
///
/// Lista di sash dimension in stato edit
///
[CascadingParameter(Name = "SashDimEditList")]
public List SashDimEditList { get; set; } = null!;
///
/// Indice della sash corrente
///
[Parameter]
public int IndexSash { get; set; } = 0;
///
/// Evento per aggiornare sash dimension
///
[Parameter]
public EventCallback EC_UpdateSashDim { get; set; }
///
/// Evento per aggiornare sash
///
[Parameter]
public EventCallback EC_UpdateSash { get; set; }
///
/// Evento per cambiare modalità di visualizzazione
///
[Parameter]
public EventCallback EC_EditView { get; set; }
///
/// Evento per richiedere reset dizionari
///
[Parameter]
public EventCallback EC_ReqResetDict { get; set; }
#endregion Public Properties
#region Protected Methods
//protected override void OnParametersSet()
//{
// base.OnParametersSet();
//}
#endregion Protected Methods
#region Private Fields
private enum ModeView
{
NULL = 0,
View = 1,
Edit = 2
}
private bool ForceChangeAll = false;
private bool isOpen = false;
private ModeView mode { get; set; } = ModeView.View;
#endregion Private Fields
#region Private Properties
///
/// Anta corrente
///
private Area CurrAnta
{
get
{
if (CurrSashGroup.AreaList[IndexSash] is Splitted)
{
return CurrSashGroup.AreaList[IndexSash];
}
else
{
return CurrSashGroup;
}
}
set
{
CurrAnta = value;
}
}
/////
///// Metodo per avere lo step da usare nella form-input
/////
/////
//public double CssStepNumber()
//{
// switch (CurrSashDim.MeasureType)
// {
// case Json.WindowConst.MeasureTypes.ABSOLUTE:
// {
// return 0.5;
// }
// case Json.WindowConst.MeasureTypes.PROPORTIONAL:
// {
// return 1;
// }
// case Json.WindowConst.MeasureTypes.PERCENTAGE:
// {
// return 0.5;
// }
// }
// return 0;
//}
///
/// Selezione tipo di apertura anta
///
private int OpeningTypeIndex
{
get => CurrSashDim.SelOpeningTypeIndex;
set
{
if (CurrSashDim.SelOpeningTypeIndex != value)
{
_ = EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = LayoutConst.DataAction.ResetHwOpt });
CurrSashDim.SelOpeningTypeIndex = value;
_ = EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
}
}
///
/// Selezione tipo di misura della dimensione dell'anta
///
private int MeasureTypeIndex
{
get => CurrSashDim.SelMeasureTypeIndex;
set
{
if (CurrSashDim.SelMeasureTypeIndex != value)
{
CurrSashDim.SelMeasureTypeIndex = value;
_ = EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
}
}
///
/// Inserimento dimensione anta
///
private double Dimension
{
get => CurrSashDim.dDimension;
set
{
if (CurrSashDim.dDimension != value)
{
CurrSashDim.dDimension = (double)Math.Round((decimal)value, CssDecimals());
_ = EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
}
}
#endregion Private Properties
#region Private Methods
///
/// Metodo per avere il numero di decimali da usare nella form-input
///
///
private int CssDecimals()
{
switch (CurrSashDim.MeasureType)
{
case MeasureTypes.ABSOLUTE:
{
return 2;
}
case MeasureTypes.PROPORTIONAL:
{
return 0;
}
case MeasureTypes.PERCENTAGE:
{
return 1;
}
}
return 0;
}
///
/// Sollevo evento richiesta per cambiare tutti i Joint
///
/// Tipo di giunto che si vuole
///
private Task ChangeAllJoints(Json.WindowConst.Joints JointType)
{
for (int i = 0; i < CurrSashDim.JointList.Count; i++)
{
Frame? frame = CurrSashGroup.ParentWindow.AreaList.FirstOrDefault();
if (frame != null && (frame.Shape is Json.WindowConst.Shapes.ARC ||
frame.Shape is Json.WindowConst.Shapes.ARC_FULL ||
frame.Shape is Json.WindowConst.Shapes.DOUBLEARC ||
frame.Shape is Json.WindowConst.Shapes.THREECENTERARC) &&
(CurrSashGroup.ParentArea.ParentArea is Split split &&
split != null &&
split.AreaList.LastOrDefault() != null &&
split.AreaList.LastOrDefault()!.AreaList.FirstOrDefault() != null &&
split.AreaList.LastOrDefault()!.AreaList.FirstOrDefault()!.Equals(CurrSashGroup)))
{
if(CurrSashGroup.SashList.Count == 1)
{
if(i == 2 || i == CurrSashDim.JointList.Count - 1)
CurrSashDim.JointList.ElementAt(i).SelJointType = Joints.ANGLED;
else
CurrSashDim.JointList.ElementAt(i).SelJointType = JointType;
}
else
{
if (IndexSash == 0 && i == CurrSashDim.JointList.Count - 1)
CurrSashDim.JointList.ElementAt(i).SelJointType = Joints.ANGLED;
else if(IndexSash == CurrSashGroup.SashList.Count - 1 && i == 2)
CurrSashDim.JointList.ElementAt(i).SelJointType = Joints.ANGLED;
else
CurrSashDim.JointList.ElementAt(i).SelJointType = JointType;
}
}
else
CurrSashDim.JointList.ElementAt(i).SelJointType = JointType;
}
return EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
///
/// Aggiornamento joint
///
/// Tipo di giunto che si vuole
///
private async Task UpdateJoint(Joint updRec)
{
// cerco il record
var currRec = CurrSashDim.JointList.FirstOrDefault(x => x.ParentArea == updRec.ParentArea && x.nIndex == updRec.nIndex);
// lo aggiorno
if (updRec != null)
{
currRec = updRec;
await EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
}
///
/// Aggiornamento element
///
/// Tipo di giunto che si vuole
///
private async Task UpdateElement(ElementDimension updRec)
{
// cerco il record
var currRec = CurrSashDim.ElementDimensionList.FirstOrDefault(x => x.ParentArea == updRec.ParentArea && x.nIndex == updRec.nIndex);
// lo aggiorno
if (updRec != null)
{
currRec = updRec;
await EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
}
///
/// Metodo per cambiare l'anta su cui è presente la maniglia
///
///
private Task ChangeHandle()
{
// Cerco la Sash che si sta considerando nella lista Sash
var s = SashGroupList.Where(x => x.GroupId == CurrSashGroup.GroupId).FirstOrDefault();
if (s != null)
{
// Setto la presenza o meno della maniglia per ogni anta
foreach (SashDimension item in s.SashList)
{
if (item.Equals(CurrSashDim))
{
item.bHasHandle = true;
}
else
{
if (item.bHasHandle)
{
switch (item.SelOpeningType)
{
case Openings.TILTTURN_LEFT:
{
item.SelOpeningType = Openings.TURNONLY_LEFT;
break;
}
case Openings.TILTTURN_RIGHT:
{
item.SelOpeningType = Openings.TURNONLY_RIGHT;
break;
}
default:
{
break;
}
}
}
item.bHasHandle = false;
}
}
}
CurrSashGroup.RefreshHardwareList();
CurrSashGroup.SetFirstHardware();
DataUpdateProfile args = new DataUpdateProfile()
{
sash = CurrSashGroup,
reqProfile = true
};
return EC_UpdateSash.InvokeAsync(args);
}
///
/// Copio contenuto anta da indexCopy a IndexModify
///
/// Indice dell'anta di cui voglio copiare contenuto
/// Indice dell'anta di cui voglio modificare contenuto
///
private Task CopyContentSash(int IndexCopy, int IndexModify)
{
isOpen = !isOpen;
// Anta selezionata
Area sashSplitted = CurrSashGroup.AreaList[IndexModify];
// Rimuovo riempimento da anta selezionata
sashSplitted.AreaList.RemoveAt(0);
// Creo la copia dell'anta scelta
Area a;
if (CurrSashGroup.AreaList[IndexCopy].AreaList.FirstOrDefault() != null)
{
a = CurrSashGroup.AreaList[IndexCopy].AreaList.FirstOrDefault()!.Copy(sashSplitted);
// Aggiungo copia all'anta selezionata
CurrSashGroup.AreaList[IndexModify].AreaList.Add(a);
}
DataUpdateProfile args = new DataUpdateProfile()
{
sash = CurrSashGroup,
reqProfile = true
};
return EC_UpdateSash.InvokeAsync(args);
}
///
/// Metodo per aggiungere lo split nella singola anta
///
///
private Task AddSplitToSash()
{
CurrAnta.AddSplit();
DataUpdateProfile args = new DataUpdateProfile()
{
sash = CurrSashGroup,
reqProfile = true
};
return EC_UpdateSash.InvokeAsync(args);
}
///
/// Metodo per aggiungere l'inglesina nella singola anta
///
///
private Task AddInglesinaToSash()
{
CurrAnta.AddInglesina();
DataUpdateProfile args = new DataUpdateProfile()
{
sash = CurrSashGroup,
reqProfile = true
};
return EC_UpdateSash.InvokeAsync(args);
}
private void ToggleDropdown()
{
isOpen = !isOpen;
}
///
/// Metodo per determinare la visualizzazione dei pulsanti dei joint
///
///
///
private string ButtonJointCss(Json.WindowConst.Joints type)
{
foreach (var item in CurrSashDim.JointList)
{
if (!item.SelJointType.Equals(type))
return "btn btn-outline-secondary btn-sm";
}
return "btn btn-secondary btn-sm";
}
private void doEdit(int index)
{
var args = new DataChangeMode
{
IndexSashEdit = index,
IndexSashClose = -1
};
_ = EC_EditView.InvokeAsync(args);
}
protected void ClosePopup(int index)
{
var args = new DataChangeMode
{
//Edit = false,
IndexSashEdit = -1,
IndexSashClose = index
};
_ = EC_EditView.InvokeAsync(args);
}
private void ChangeAll()
{
ForceChangeAll = !ForceChangeAll;
}
#endregion Private Methods
}
public class DataChangeMode {
public bool Edit { get; set; }
public int IndexSashEdit { get; set; }
public int IndexSashClose { get; set; }
}
public class DataUpdateProfile
{
public Sash sash { get; set; }
public bool reqProfile { get; set; } = false;
}
}