from django.contrib.auth.models import User, Group
from django.db import models
from django.utils import timezone

from otentifikasi.models import Biodata
from pemeriksaan.models import Pendaftaran


class CaraBayar(
    models.Model):  # referensi kelas yang dilakukan atau yang akan diterapkan pada tarif bisa kelas 1 2 3 VIP atau ada kelas yang lain
    nama = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.CharField(max_length=255, null=True, blank=True)
    created_at = models.DateTimeField(null=True, blank=True, default=timezone.now)

    def __str__(self):
        return f'{self.nama}'

    class Meta:
        verbose_name = 'Cara Bayar'
        verbose_name_plural = 'Cara Bayar'


class Kelas(
    models.Model):  # referensi kelas yang dilakukan atau yang akan diterapkan pada tarif bisa kelas 1 2 3 VIP atau ada kelas yang lain
    nama = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.CharField(max_length=255, null=True, blank=True)
    created_at = models.DateTimeField(null=True, blank=True, default=timezone.now)

    def __str__(self):
        return f'{self.nama}'

    class Meta:
        verbose_name = 'Kelas'
        verbose_name_plural = 'Kelas'


class Layanan(models.Model):
    nama = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.CharField(max_length=255, null=True, blank=True)
    created_at = models.DateTimeField(null=True, blank=True, default=timezone.now)
    penanggung_jawab_layanan = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True)

    def __str__(self):
        return f'{self.nama}'

    class Meta:
        verbose_name = 'Layanan'
        verbose_name_plural = 'Layanan'


class SubLayanan(models.Model):
    relasi = models.ForeignKey(Layanan, on_delete=models.SET_NULL, null=True, blank=True)
    nama = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.CharField(max_length=255, null=True, blank=True)
    created_at = models.DateTimeField(null=True, blank=True, default=timezone.now)

    def __str__(self):
        return f'{self.relasi} - {self.nama}'

    class Meta:
        verbose_name = 'Sub Layanan'
        verbose_name_plural = 'Sub Layanan'


class TarifLayanan(models.Model):
    relasi = models.ForeignKey(SubLayanan, on_delete=models.SET_NULL, null=True, blank=True)
    nama = models.CharField(max_length=255,null=True, blank=True)
    kelas = models.ForeignKey(Kelas, on_delete=models.SET_NULL, null=True, blank=True)
    cara_bayar = models.ForeignKey(CaraBayar, on_delete=models.SET_NULL, null=True, blank=True)
    harga = models.FloatField(null=True, blank=True, default=0)
    presentase_dokter_persen = models.FloatField(null=True, blank=True, default=0)
    presentase_dokter_rp = models.FloatField(null=True, blank=True, default=0)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.relasi} - {self.nama} {self.harga} {self.cara_bayar} {self.kelas}'

    class Meta:
        verbose_name = 'Tarif Layanan'
        verbose_name_plural = 'Tarif Layanan'


class InvoiceLayanan(models.Model):
    kode = models.CharField(max_length=255, null=True, blank=True)
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.SET_NULL, null=True, blank=True)
    tarif_layanan = models.ForeignKey(TarifLayanan, on_delete=models.SET_NULL, null=True, blank=True)
    kuantitas = models.FloatField(null=True, blank=True)
    progress = models.CharField(max_length=255, null=True, blank=True)
    # new parameter
    diskon_pembelian = models.CharField(max_length=255, null=True, blank=True)
    tipe_diskon = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    dokter = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True,
                               related_name='dokter_invoice_layanan')
    petugas = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True,
                                related_name='petugas_invoice_layanan')
    file = models.FileField(upload_to='file_layanan', null=True, blank=True)
    is_dibayar = models.BooleanField(null=True, blank=True, default=False)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.kode} {self.tarif_layanan}'

    class Meta:
        verbose_name = 'Invoice Layanan'
        verbose_name_plural = 'Invoice Layanan'


class LogProgressInvoiceLayanan(models.Model):
    relasi = models.ForeignKey(InvoiceLayanan, on_delete=models.SET_NULL, null=True, blank=True)
    progress = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.relasi} {self.progress} {self.created_at}'

    class Meta:
        verbose_name = 'Log Progress Invoice Layanan'
        verbose_name_plural = 'Log Progress Invoice Layanan'


class Kamar(models.Model):
    nama = models.CharField(max_length=255, null=True, blank=True)
    harga = models.FloatField(null=True, blank=True, default=0)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)
    kapasitas = models.FloatField(null=True, blank=True)

    def __str__(self):
        return f'{self.nama} {self.catatan} {self.created_at} {self.kapasitas}'

    class Meta:
        verbose_name = 'Kamar'
        verbose_name_plural = 'Kamar'


class InvoiceBed(models.Model):
    kode = models.CharField(max_length=255, null=True, blank=True)
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.SET_NULL, null=True, blank=True)
    nama = models.CharField(max_length=255, null=True, blank=True)
    kamar = models.ForeignKey(Kamar, on_delete=models.SET_NULL, null=True, blank=True)
    # kuantitas = models.FloatField("Berapa Hari Menginap", null=True, blank=True)
    progress = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)

    file = models.FileField(upload_to='file_layanan', null=True, blank=True)
    is_dibayar = models.BooleanField(null=True, blank=True, default=False)
    waktu_masuk = models.DateField(null=True, blank=True)
    waktu_keluar = models.DateField(null=True, blank=True)
    tanggal_rujukan_ranap = models.DateField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.kode} {self.kamar}'

    class Meta:
        verbose_name = 'Invoice Bed'
        verbose_name_plural = 'Invoice Bed'


class Signature(models.Model):
    image = models.ImageField(upload_to='signatures/')

# LABORATORIUM
class TarifLab(models.Model):
    nama = models.CharField(max_length=255, null=True, blank=True)
    kelas = models.ForeignKey(Kelas, on_delete=models.SET_NULL, null=True, blank=True)
    cara_bayar = models.ForeignKey(CaraBayar, on_delete=models.SET_NULL, null=True, blank=True)
    harga = models.FloatField(null=True, blank=True, default=0)
    presentase_dokter_persen = models.FloatField(null=True, blank=True, default=0)
    presentase_dokter_rp = models.FloatField(null=True, blank=True, default=0)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def _str_(self):
        return f'{self.nama} {self.harga} {self.cara_bayar} {self.kelas}'

    class Meta:
        verbose_name = 'Tarif Lab'
        verbose_name_plural = 'Tarif Lab'
        
class Dokumenlab(models.Model):
    id = models.AutoField(primary_key=True)
    nama_lab = models.CharField(max_length=255, null=True, blank=True)
    nama_pasien = models.TextField(null=True, blank=True)
    tanggal_pemeriksaan = models.DateTimeField(default=timezone.now)
    created_at = models.DateTimeField(default=timezone.now)
    doc = models.TextField(max_length=255, null=True, blank=True)
    pendaftaran_id = models.TextField(max_length=255, null=True, blank=True)
    lab_id = models.CharField(max_length=255, null=True, blank=True)

    class Meta:
        verbose_name = 'Dokumen Lab'
        verbose_name_plural = 'Dokumen Lab'

class InvoiceLab(models.Model):
    kode = models.CharField(max_length=255, null=True, blank=True)
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.SET_NULL, null=True, blank=True)
    tarif_lab = models.ForeignKey(TarifLab, on_delete=models.SET_NULL, null=True, blank=True)
    kuantitas = models.FloatField(null=True, blank=True)
    progress = models.CharField(max_length=255, null=True, blank=True)
    # new parameter
    diskon_pembelian = models.CharField(max_length=255, null=True, blank=True)
    tipe_diskon = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    dokter = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True,
                               related_name='dokter_invoice_lab')
    petugas = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True,
                                related_name='petugas_invoice_lab')
    # doc = models.FileField(upload_to='file_lab', null=True, blank=True)
    is_dibayar = models.BooleanField(null=True, blank=True, default=False)
    created_at = models.DateTimeField(default=timezone.now)
    # doc = models.ForeignKey(Dokumenlab, on_delete=models.SET_NULL, null=True, blank=True)

    def _str_(self):
        return f'{self.kode} {self.tarif_lab}'

    class Meta:
        verbose_name = 'Invoice Lab'
        verbose_name_plural = 'Invoice Lab'


class JasaMedis(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True,related_name='user')
    group = models.ForeignKey(Group, on_delete=models.SET_NULL, null=True, blank=True,related_name='group')
    note = models.CharField(max_length=255, null=True, blank=True)
    nominal = models.DecimalField(max_digits=10, decimal_places=2)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name = 'Jasa Medis'
        verbose_name_plural = 'Jasa Medis'