using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;

namespace AccountTracking.Api.Models;

[Table("transactions")]
public class Transaction
{
    [Key]
    [Column("id")]
    public int Id { get; set; }

    [Column("account_number")]
    [MaxLength(30)]
    public string AccountNumber { get; set; } = "";

    [Column("booking_date")]
    public DateOnly BookingDate { get; set; }

    [Column("amount")]
    [Precision(15, 2)]
    public decimal Amount { get; set; }

    [Column("currency")]
    [MaxLength(3)]
    public string Currency { get; set; } = "CZK";

    [Column("balance")]
    [Precision(15, 2)]
    public decimal Balance { get; set; }

    [Column("counter_party_name")]
    [MaxLength(255)]
    public string? CounterPartyName { get; set; }

    [Column("operation_description")]
    [MaxLength(255)]
    public string? OperationDescription { get; set; }

    [Column("message")]
    public string? Message { get; set; }

    [Column("category")]
    [MaxLength(100)]
    public string? Category { get; set; }

    [Column("variable_symbol")]
    [MaxLength(30)]
    public string? VariableSymbol { get; set; }

    [Column("bank_note")]
    [MaxLength(255)]
    public string? BankNote { get; set; }

    [Column("transaction_id")]
    [MaxLength(512)]
    public string TransactionId { get; set; } = "";

    // Extra CSV columns stored but not used in UI
    [Column("counter_bank_code")] [MaxLength(255)] public string? CounterBankCode { get; set; }
    [Column("constant_symbol")] [MaxLength(255)] public string? ConstantSymbol { get; set; }
    [Column("specific_symbol")] [MaxLength(255)] public string? SpecificSymbol { get; set; }
    [Column("order_name")] [MaxLength(255)] public string? OrderName { get; set; }
    [Column("exchange_rate")] [MaxLength(255)] public string? ExchangeRate { get; set; }
    [Column("e2e_id")] [MaxLength(255)] public string? E2EId { get; set; }
    [Column("payer_reference")] [MaxLength(255)] public string? PayerReference { get; set; }
    [Column("original_payer")] [MaxLength(255)] public string? OriginalPayer { get; set; }
    [Column("final_recipient")] [MaxLength(255)] public string? FinalRecipient { get; set; }
    [Column("original_transaction")] [MaxLength(255)] public string? OriginalTransaction { get; set; }
}
