#include "uksi_oled.h"

void UKSI_Print(float Iso, uint8_t DCState, float Voltage, float Current_uA)
{
  int second_layer = 22;
    // Очищаем буфер
    GFX_Clean_Buffer_Frame(oled_buf);
    
    // 1. Сопротивление изоляции - крупно сверху
    char iso_str[20];
    
    // Для STM32 sprintf не поддерживает %f, используем dtostrf или ручное форматирование
    if (Iso >= 100.0f) {
        sprintf(iso_str, "OL MOhm");
    } else if (Iso >= 1.0f) {
        int int_part = (int)Iso;
        int dec_part = (int)((Iso - int_part) * 100);
        sprintf(iso_str, "%d.%02d MOhm", int_part, dec_part);
    } else if (Iso >= 0.001f) {
        float kOhm = Iso * 1000.0f;
        int int_part = (int)kOhm;
        sprintf(iso_str, "%d kOhm", int_part);
    } else {
        float Ohm = Iso * 1000000.0f;
        int int_part = (int)Ohm;
        sprintf(iso_str, "%d Ohm", int_part);
    }
    
    // Отображаем сопротивление
    GFX_Output_String(oled_buf, 10, 2, iso_str, GFX_FONT_TAHOMA_15, 1, 0);
    
    
    // 2. Состояние DC
    uint8_t x = 105;   // позиция импульса
    uint8_t y = 14;   // нижний уровень
    uint8_t h = 8;    // высота импульса
    uint8_t wl = 2;   // длина нижнего уровня
    uint8_t wh = 9;   // ширина верхнего уровня
    if (DCState)
    {
        // _|
        __GFX_Draw_Line(oled_buf, x, y, x + wl, y, 1);
        __GFX_Draw_Line(oled_buf, x + wl, y, x + wl, y - h, 1);

        // ─ верх
        __GFX_Draw_Line(oled_buf, x + wl, y - h, x + wl + wh, y - h, 1);

        // |_ 
        __GFX_Draw_Line(oled_buf, x + wl + wh, y - h, x + wl + wh, y, 1);
        __GFX_Draw_Line(oled_buf, x + wl + wh, y, x + wl*2 + wh, y, 1);
    }
    else
    {
        // просто __
        __GFX_Draw_Line(oled_buf, x, y, x + wl*2 + wh, y, 1);
    }
    
    // 3. Напряжение (0-2В)
    char volt_str[16];
    int volt_int = (int)(Voltage * 1000); // милливольты
    sprintf(volt_str, "U: %d.%03dV", volt_int / 1000, volt_int % 1000);
    GFX_Output_String(oled_buf, 10, 22, volt_str, GFX_FONT_TAHOMA_8, 1, 0);
    
    // 4. Ток (уже в мкА)
    char curr_str[16];
    int curr_int = (int)Current_uA;
    
    if (Current_uA >= 1000.0f) {
        sprintf(curr_str, "I: %duA", curr_int);
    } else if (Current_uA >= 100.0f) {
        int dec_part = (int)((Current_uA - curr_int) * 1);
        sprintf(curr_str, "I: %duA", curr_int);
    } else if (Current_uA >= 10.0f) {
        int dec_part = (int)((Current_uA - curr_int) * 10);
        sprintf(curr_str, "I: %d.%01duA", curr_int, dec_part);
    } else {
        int dec_part = (int)((Current_uA - curr_int) * 100);
        sprintf(curr_str, "I: %d.%02duA", curr_int, dec_part);
    }
    
    GFX_Output_String(oled_buf, 72, 22, curr_str, GFX_FONT_TAHOMA_8, 1, 0);
    
    // 6. Обновляем дисплей
    oled_refresh();
}