from datetime import date

from app.extensions import db


class Analysis(db.Model):
    __tablename__ = "analyses"

    id = db.Column(db.Integer, primary_key=True)
    created_at = db.Column(db.DateTime, server_default=db.func.now(), nullable=False)
    updated_at = db.Column(
        db.DateTime, server_default=db.func.now(), onupdate=db.func.now(), nullable=False
    )

    nama_debitur = db.Column(db.String(150), nullable=False, index=True)
    nik = db.Column(db.String(32), nullable=False, index=True)
    alamat = db.Column(db.Text, nullable=False)
    nomor_hp = db.Column(db.String(30), nullable=False)
    jenis_usaha = db.Column(db.String(120), nullable=False)
    lama_usaha = db.Column(db.String(80), nullable=False)
    status_tempat_usaha = db.Column(db.String(20), nullable=False)
    tanggal_analisis = db.Column(db.Date, nullable=False, default=date.today, index=True)
    nama_pasangan = db.Column(db.String(150))
    jumlah_tanggungan = db.Column(db.Integer, nullable=False, default=0)

    kas = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    simpanan = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    piutang = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    persediaan = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    tanah = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    bangunan = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    kendaraan = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    mesin = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    peralatan = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    inventaris = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    aset_tetap_lainnya = db.Column(db.Numeric(18, 2), nullable=False, default=0)

    hutang_dagang = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    hutang_bank = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    hutang_leasing = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    hutang_keluarga = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    hutang_lainnya = db.Column(db.Numeric(18, 2), nullable=False, default=0)

    omzet_bulanan = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    harga_pokok_penjualan = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    biaya_operasional = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    biaya_gaji = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    biaya_listrik = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    biaya_transport = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    biaya_lainnya = db.Column(db.Numeric(18, 2), nullable=False, default=0)

    penerimaan_bulanan = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    pengeluaran_bulanan = db.Column(db.Numeric(18, 2), nullable=False, default=0)

    penghasilan_bersih = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    pengeluaran_rumah_tangga = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    angsuran_lama = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    estimasi_angsuran_baru = db.Column(db.Numeric(18, 2), nullable=False, default=0)

    score_character = db.Column(db.Integer, nullable=False, default=0)
    score_capacity = db.Column(db.Integer, nullable=False, default=0)
    score_capital = db.Column(db.Integer, nullable=False, default=0)
    score_collateral = db.Column(db.Integer, nullable=False, default=0)
    score_condition = db.Column(db.Integer, nullable=False, default=0)

    jenis_agunan = db.Column(db.String(120))
    nomor_sertifikat = db.Column(db.String(120))
    luas_tanah = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    luas_bangunan = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    nilai_pasar = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    nilai_likuidasi = db.Column(db.Numeric(18, 2), nullable=False, default=0)

    plafon_kredit = db.Column(db.Numeric(18, 2), nullable=False, default=0)
    suku_bunga = db.Column(db.Numeric(8, 4), nullable=False, default=0)
    tenor = db.Column(db.Integer, nullable=False, default=0)

