using Elwig.Helpers;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;

namespace Elwig.Models {
    [Table("season"), PrimaryKey("Year")]
    public class Season {
        [Column("year")]
        public int Year { get; set; }

        [Column("currency")]
        public string CurrencyCode { get; set; }

        [Column("precision")]
        public byte Precision { get; set; }

        [Column("start_date")]
        public string? StartDateString { get; set; }

        [NotMapped]
        public DateOnly? StartDate {
            get {
                return StartDateString != null ? DateOnly.ParseExact(StartDateString, "yyyy-MM-dd") : null;
            }
            set {
                StartDateString = value?.ToString("yyyy-MM-dd");
            }
        }

        [Column("end_date")]
        public string? EndDateString { get; set; }

        [NotMapped]
        public DateOnly? EndDate {
            get {
                return EndDateString != null ? DateOnly.ParseExact(EndDateString, "yyyy-MM-dd") : null;
            }
            set {
                EndDateString = value?.ToString("yyyy-MM-dd");
            }
        }

        [ForeignKey("CurrencyCode")]
        public virtual Currency Currency { get; private set; }

        [InverseProperty("Season")]
        public virtual ISet<Modifier> Modifiers { get; private set; }

        [InverseProperty("Season")]
        public virtual ISet<PaymentVar> PaymentVariants { get; private set; }

        [InverseProperty("Season")]
        public virtual ISet<Delivery> Deliveries { get; private set; }

        public decimal DecFromDb(long value) {
            return Utils.DecFromDb(value, Precision);
        }

        public long DecToDb(decimal value) {
            return Utils.DecToDb(value, Precision);
        }
    }
}