﻿/* Copyright (C) 2011  Jan Källman
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
 * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
 *
 * All code and executables are provided "as is" with no warranty either express or implied.
 * The author accepts no liability for any damage or loss of business that this product may cause.
 *
 * Code change notes:
 *
 * Author							Change						Date
 *******************************************************************************
 * Mats Alm   		                Added		                2013-12-03
 *******************************************************************************/

using System.Collections.Generic;
using System.Linq;

namespace AppsheetEpplus;

public class Time : TimeBaseFunction {
  public override CompileResult Execute(
      IEnumerable<FunctionArgument> arguments,
      ParsingContext context) {
    ValidateArguments(arguments, 1);
    var firstArg = arguments.ElementAt(0).Value.ToString();
    if (arguments.Count() == 1 && TimeStringParser.CanParse(firstArg)) {
      var result = TimeStringParser.Parse(firstArg);
      return new(result, DataType.Time);
    }
    ValidateArguments(arguments, 3);
    var hour = ArgToInt(arguments, 0);
    var min = ArgToInt(arguments, 1);
    var sec = ArgToInt(arguments, 2);

    ThrowArgumentExceptionIf(() => sec < 0 || sec > 59, "Invalid second: " + sec);
    ThrowArgumentExceptionIf(() => min < 0 || min > 59, "Invalid minute: " + min);
    ThrowArgumentExceptionIf(() => min < 0 || hour > 23, "Invalid hour: " + hour);

    var secondsOfThisTime = (double)(hour * 60 * 60 + min * 60 + sec);
    return CreateResult(GetTimeSerialNumber(secondsOfThisTime), DataType.Time);
  }
}
