<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use App\Models\Patient;

class Diagnose extends Model
{
    protected $table = 'diagnoses';
    
    protected $fillable = [
        // Clinical Data Fields
        'patient_id',
        'age',
        'gender',
        'socioeconomic_status',
        'sunlight_exposure',
        'sunglass_use',
        'current_regular_exercise',
        'past_regular_exercise',
        'job_physical_activity',
        'current_smoking',
        'current_smoking_duration',
        'past_smoking',
        'past_smoking_duration',
        'other_tobacco_use',
        'other_tobacco_duration',
        'fruit_consumption',
        'vegetable_consumption',
        'salad_consumption',
        'milk_consumption',
        'yogurt_consumption',
        'fish_consumption',
        'red_meat_consumption',
        'solid_vegetable_oil',
        'liquid_vegetable_oil',
        'frying_oil',
        'animal_oil',
        'waist_circumference',
        'bmi',
        'fasting_blood_sugar',
        'blood_pressure',
        'ccu_hospitalization',
        'vascular_disease',
        'heart_disease',
        'myocardial_infarction',
        'high_cholesterol',
        'hypertension',
        'atherosclerosis',
        'high_lipids',
        'diabetes',
        'diabetes_duration',
        'diabetes_type',
        'diabetes_treatment',
        'hormone_usage',
        'menopause_age',
        'family_eye_disease',
        'family_amd',
        'eye_medications',
        'laser_treatment',
        'eye_injections',
        'eye_trauma',
        'cataract_surgery',
        'cataract_surgery_age',
        'intraocular_lens_implant',
        'best_corrected_vision',
        'refractive_errors',
        'refractive_error_severity',
        'eye_surgery_complications',
        'trachoma',
        'phthisis',
        'corneal_scar',
        'eyeball_abnormalities',
        'glaucoma',
        'diabetic_retinopathy',
        'lens_opacity',
        'aphakia',
        'katara',
        'iris_color',
        'arcus_cornea',
        'drusen',
        
        // New fields for API integration
        'api_response',
        'predicted_class',
        'probability_amd',
        'diagnosis_type',
        'image_path',
        'eye_side',
        'notes',
        'is_complete'
    ];
    
    protected $casts = [
        'predicted_class' => 'integer',
        'probability_amd' => 'float',
        'is_complete' => 'boolean',
        'created_at' => 'datetime:Y-m-d H:i:s',
        'updated_at' => 'datetime:Y-m-d H:i:s',
    ];
    
    // Define the choices/options as constants (similar to Django choices)
const FREQUENCY_CHOICES = [
    5 => 'خیلی زیاد',
    4 => 'زیاد',
    3 => 'تا حدی',
    2 => 'کم',
    1 => 'خیلی کم',
];
    
    const DIAGNOSIS_TYPES = [
        'clinical' => 'تشخیص با داده های بالینی',
        'image' => 'تشخیص با تصویر',
        'combined' => 'تشخیص ترکیبی',
    ];
    
    const EYE_SIDES = [
        'OD' => 'چشم راست',
        'OS' => 'چشم چپ',
        'both' => 'هر دو چشم',
    ];
    
    // Relationship with Patient
    public function patient()
    {
        return $this->belongsTo(Patient::class);
    }
    
    // Scope for clinical diagnoses
    public function scopeClinical($query)
    {
        return $query->where('diagnosis_type', 'clinical');
    }
    
    // Scope for image diagnoses
    public function scopeImage($query)
    {
        return $query->where('diagnosis_type', 'image');
    }
    
    // Scope for completed diagnoses
    public function scopeComplete($query)
    {
        return $query->where('is_complete', true);
    }
    
    // Scope for AMD positive cases
    public function scopeAmdPositive($query)
    {
        return $query->where('predicted_class', 1);
    }
    
    // Scope for AMD negative cases
    public function scopeAmdNegative($query)
    {
        return $query->where('predicted_class', 0);
    }
    
    // Accessor for diagnosis type label
    public function getDiagnosisTypeLabelAttribute()
    {
        return self::DIAGNOSIS_TYPES[$this->diagnosis_type] ?? $this->diagnosis_type;
    }
    
    // Accessor for eye side label
    public function getEyeSideLabelAttribute()
    {
        return self::EYE_SIDES[$this->eye_side] ?? $this->eye_side;
    }
    
    // Accessor for predicted class label
    public function getPredictedClassLabelAttribute()
    {
        return $this->predicted_class == 1 ? 'AMD مثبت' : 'AMD منفی';
    }
    
    // Accessor for probability percentage
    public function getProbabilityPercentageAttribute()
    {
        return $this->probability_amd ? round($this->probability_amd * 100, 2) : 0;
    }
    
    // Accessor for API response as array
    public function getApiResponseArrayAttribute()
    {
        return $this->api_response ? json_decode($this->api_response, true) : null;
    }
    
    // Helper method to get Persian label for a field
    public function getLabel($field)
    {
        $labels = [
            'age' => 'سن',
            'gender' => 'جنسیت',
            'socioeconomic_status' => 'وضعیت اقتصادی-اجتماعی',
            'sunlight_exposure' => 'قرارگیری در معرض نور خورشید',
            'sunglass_use' => 'استفاده از عینک آفتابی',
            'current_regular_exercise' => 'ورزش منظم فعلی',
            'past_regular_exercise' => 'ورزش منظم گذشته',
            'job_physical_activity' => 'فعالیت فیزیکی شغل',
            'current_smoking' => 'مصرف فعلی سیگار',
            'current_smoking_duration' => 'مدت مصرف فعلی سیگار',
            'past_smoking' => 'مصرف قبلی سیگار',
            'past_smoking_duration' => 'مدت مصرف قبلی سیگار',
            'other_tobacco_use' => 'مصرف سایر دخانیات',
            'other_tobacco_duration' => 'مدت مصرف سایر دخانیات',
            'fruit_consumption' => 'مصرف میوه',
            'vegetable_consumption' => 'مصرف سبزی',
            'salad_consumption' => 'مصرف سالاد',
            'milk_consumption' => 'مصرف شیر',
            'yogurt_consumption' => 'مصرف ماست',
            'fish_consumption' => 'مصرف ماهی',
            'red_meat_consumption' => 'مصرف گوشت قرمز',
            'solid_vegetable_oil' => 'مصرف روغن جامد',
            'liquid_vegetable_oil' => 'مصرف روغن مایع',
            'frying_oil' => 'مصرف روغن سرخ کردنی',
            'animal_oil' => 'مصرف روغن حیوانی',
            'waist_circumference' => 'دور کمر',
            'bmi' => 'شاخص توده بدنی',
            'fasting_blood_sugar' => 'قند خون ناشتا',
            'blood_pressure' => 'فشار خون',
            'ccu_hospitalization' => 'بستری در CCU',
            'vascular_disease' => 'بیماری عروقی',
            'heart_disease' => 'بیماری قلبی',
            'myocardial_infarction' => 'سکته قلبی',
            'high_cholesterol' => 'کلسترول بالا',
            'hypertension' => 'فشار خون بالا',
            'atherosclerosis' => 'آترواسکلروز',
            'high_lipids' => 'چربی خون بالا',
            'diabetes' => 'دیابت',
            'diabetes_duration' => 'مدت دیابت',
            'diabetes_type' => 'نوع دیابت',
            'diabetes_treatment' => 'درمان دیابت',
            'hormone_usage' => 'مصرف هورمون',
            'menopause_age' => 'سن یائسگی',
            'family_eye_disease' => 'بیماری چشمی خانوادگی',
            'family_amd' => 'AMD خانوادگی',
            'eye_medications' => 'داروهای چشمی',
            'laser_treatment' => 'درمان لیزری',
            'eye_injections' => 'تزریقات چشمی',
            'eye_trauma' => 'ضربه چشمی',
            'cataract_surgery' => 'جراحی آب مروارید',
            'cataract_surgery_age' => 'سن جراحی آب مروارید',
            'intraocular_lens_implant' => 'لنز داخل چشمی',
            'best_corrected_vision' => 'بهترین دید اصلاح شده',
            'refractive_errors' => 'عیوب انکساری',
            'refractive_error_severity' => 'شدت عیوب انکساری',
            'eye_surgery_complications' => 'عوارض جراحی چشم',
            'trachoma' => 'تراخم',
            'phthisis' => 'تایزیس',
            'corneal_scar' => 'اسکار قرنیه',
            'eyeball_abnormalities' => 'ناهنجاری کره چشم',
            'glaucoma' => 'گلوکوم',
            'diabetic_retinopathy' => 'رتینوپاتی دیابتی',
            'lens_opacity' => 'کدورت عدسی',
            'aphakia' => 'آفاکی','katara'=>'کاتاراکت',
            'iris_color' => 'رنگ عنبیه',
            'arcus_cornea' => 'Arcus cornea',
            'drusen' => 'Drusen',
            
            // New fields
            'api_response' => 'پاسخ API',
            'predicted_class' => 'کلاس پیش‌بینی شده',
            'probability_amd' => 'احتمال AMD',
            'diagnosis_type' => 'نوع تشخیص',
            'image_path' => 'مسیر تصویر',
            'eye_side' => 'سمت چشم',
            'notes' => 'یادداشت',
            'is_complete' => 'تکمیل شده',
        ];
        
        return $labels[$field] ?? $field;
    }
    
    // Helper method to get Persian value
public function getPersianValue($field)
{
    $value = $this->$field;

    if (isset(self::FREQUENCY_CHOICES[$value])) {
        return self::FREQUENCY_CHOICES[$value];
    }

    return $value;
}
    
    // Method to mark diagnosis as complete
    public function markAsComplete()
    {
        $this->update(['is_complete' => true]);
        return $this;
    }
    
    // Method to get formatted API response for display
    public function getFormattedApiResponse()
    {
        if (!$this->api_response) {
            return 'بدون پاسخ API';
        }
        
        $response = json_decode($this->api_response, true);
        
        if (json_last_error() !== JSON_ERROR_NONE) {
            return $this->api_response;
        }
        
        return json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
    }
}