using Sonex.DBWrapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sonex.Client.Models
{
    public sealed class DapperTestTypesRow
    {
        public int Id { get; set; }
        public int IntCol { get; set; }
        public long BigintCol { get; set; }
        public short SmallintCol { get; set; }
        public decimal DecimalCol { get; set; }
        public float RealCol { get; set; }
        public double DoubleCol { get; set; }
        public bool BoolCol { get; set; }

        public string TextCol { get; set; } = null!;
        public string VarcharCol { get; set; } = null!;
        public string CharCol { get; set; } = null!;

        public DateOnly DateCol { get; set; }
        public TimeOnly TimeCol { get; set; }
        public DateTime TimestampCol { get; set; }              // bez TZ

        public byte[] ByteaCol { get; set; } = null!;
        public Guid UuidCol { get; set; }

        public string JsonCol { get; set; } = null!;             // JSON jako text (najszybciej)
        public string JsonbCol { get; set; } = null!;

        public decimal MoneyCol { get; set; }                    // PG money → decimal
        public TimeSpan IntervalCol { get; set; }
        public string TestTextCol01 { get; set; } = null!;
        public string TestTextCol02 { get; set; } = null!;
        public string TestTextCol03 { get; set; } = null!;
        public string TestTextCol04 { get; set; } = null!;
        public string TestTextCol05 { get; set; } = null!;
        public string TestTextCol06 { get; set; } = null!;

        public static Task<DB.Result<DapperTestTypesRow>> GetAll(int limit)
        {
            return DB.QueryListAsync<DapperTestTypesRow>("SELECT * FROM sonex.dapper_test_types LIMIT @limit;", new{ limit });
        }
    }
}
