using System;
using System.Text;
using MarketData.Utils;

namespace MarketData.MarketDataModel
{
  public class ResistanceSupport
  {
    private Price price;
    private double resistance1;
    private double support1;
    private double resistance2;
    private double support2;
    private double resistance3;
    private double support3;

    public ResistanceSupport(Price price)
    {  // calculate pivot points
      this.price = price;
      double pivot=(price.Low+price.Close+price.High)/3.00;
      resistance1=(2.00*pivot)-price.Low;
      support1=(2.00*pivot)-price.High;
      resistance2 = pivot + (price.High - price.Low);
      support2 = pivot - (price.High - price.Low);
      resistance3 = price.High + 2.00*(pivot-price.Low);
      support3 = price.Low - 2.00*(price.High - pivot);
    }
    public double Resistance1
    {
      get { return resistance1; }
    }
    public double Support1
    { 
      get { return support1; }
    }
    public double Resistance2
    {
      get { return resistance2; }
    }
    public double Support2
    {
      get { return support2; }
    }
    public double Resistance3
    {
      get { return resistance3; }
    }
    public double Support3
    {
      get { return support3; }
    }
    public double High
    {
      get { return price.High; }
    }
    public double Low
    {
      get { return price.Low; }
    }
    public double Close
    {
      get { return price.Close; }
    }
    public DateTime Date
    {
      get { return price.Date; }
    }
    public static string Header
    {
      get { return "Symbol,Date,R1,S1,R2,S2,R3,S3,High,Low,Close"; }
    }
    public override string ToString()
    {
      StringBuilder sb = new StringBuilder();
      sb.Append(price.Symbol).Append(",");
      sb.Append(Utility.DateTimeToStringMMHDDHYYYY(price.Date)).Append(",");
      sb.Append(Utility.FormatCurrency(resistance1)).Append(",");
      sb.Append(Utility.FormatCurrency(support1)).Append(",");
      sb.Append(Utility.FormatCurrency(resistance2)).Append(",");
      sb.Append(Utility.FormatCurrency(support2)).Append(",");
      sb.Append(Utility.FormatCurrency(resistance3)).Append(",");
      sb.Append(Utility.FormatCurrency(support3)).Append(",");
      sb.Append(Utility.FormatCurrency(price.High)).Append(",");
      sb.Append(Utility.FormatCurrency(price.Low)).Append(",");
      sb.Append(Utility.FormatCurrency(price.Close));
      return sb.ToString();
    }
    public string ToStringLong()
    {
      StringBuilder sb = new StringBuilder();
      sb.Append("******** R E S I S T A N C E   A N D  S U P P O R T ****").Append("\n");
      sb.Append("R3:").Append(Utility.FormatCurrency(resistance3)).Append("\n");
      sb.Append("R2:").Append(Utility.FormatCurrency(resistance2)).Append("\n");
      sb.Append("R1:").Append(Utility.FormatCurrency(resistance1)).Append("\n");
      sb.Append("***************************************").Append("\n");
      sb.Append("S1:").Append(Utility.FormatCurrency(support1)).Append("\n");
      sb.Append("S2:").Append(Utility.FormatCurrency(support2)).Append("\n");
      sb.Append("S3:").Append(Utility.FormatCurrency(support3)).Append("\n");
      sb.Append("*************************************************************");
      return sb.ToString();
    }
  }
}
