// pdfFillDataAEPOhio.js
const fs = require('fs');
const path = require('path');
const pdfFillData = require('./pdfFillData'); // Родительский класс
const { rgb, degrees } = require('pdf-lib');
const randomData = require('./randomDataGenerator');

class pdfFillDataAEPOhio extends pdfFillData {
    constructor() {
        super('AEPOhio');
        this.usage_history_data = [];

        this.usage_details_prev_year = 0; // e.g., Aug '17
        this.usage_details_prev_month = 0; // e.g., Jul '18
        this.usage_details_curr_month = 0; // e.g., Aug '18

        this.cost_details_prev_year = 0; // e.g., Aug '17
        this.cost_details_prev_month = 0; // e.g., Jul '18
        this.cost_details_curr_month = 0; // e.g., Aug '18

        this.temp_details_prev_year = 0; // e.g., Aug '17
        this.temp_details_prev_month = 0; // e.g., Jul '18
        this.temp_details_curr_month = 0; // e.g., Aug '18        
        // Коэффициент для коррекции Y для базовой линии.
        // Настройте это значение (0.8 - 1.0) после первых тестов для лучшего выравнивания.
        this.baselineCorrectionFactor = 0.85;

        // --- Свойства, специфичные для счета AEP Ohio ---

        // Заголовок
        this.amount_due_date = '';
        this.amount_due_value = '';
        this.bill_mailing_date = '';
        this.account_number = '';

        // Адреса
        this.service_address_line1 = '';
        this.service_address_line2 = '';        
        this.customer_name = '';
        this.attn_name = ''; // "ATTN: TIM SALTER" - опционально

        // Сводка по счету (Current bill summary)
        this.billing_period_from = '';
        this.billing_period_to = '';
        this.billing_period_days = ''; // e.g., (28 days)

        // Круговая диаграмма
        this.current_charges_kwh = '';
        this.current_charges_value = ''; // $519.88
        this.supplier_charges = '';
        this.delivery_charge = '';

        // Отрывной купон (Remittance Stub)
        this.remit_customer_name = '';
        this.remit_service_address = '';
        this.remit_account_number = '';
        this.remit_amount_due_date = '';
        this.remit_amount_due_value = '';
        this.remit_pay_after_date_amount = '';
        this.barcode_number = '';

        // Данные для других страниц (если нужно будет детализировать)
        // Пример
        this.previous_balance_due = '';
        this.payment_thank_you = ''; // "-782.05"

        this.total_amount_due_last_billing = '';
        this.payment_thank_you_date = '';
        this.payment_thank_you_amount = '';
        this.late_payment_charge = '';
        this.previous_balance_due = '';

        // Блок "Current AEP Ohio Charges" (Детализация для Delivery Charge)
        this.tariff_info_line = ''; // "Tariff 840 - Medium General Service 08/13/18"
        this.service_delivery_identifier = '';
        this.transmission_service = '';
        this.distribution_service = '';
        this.customer_charge_detail = ''; // Переименовали, чтобы не конфликтовать со свойством из другого счета
        this.retail_stability_rider = '';
        this.deferred_asset_rider = '';
        this.phase_in_recovery_rider = '';
        this.power_purchase_rider = '';
        this.current_electric_charges_total = ''; // Итог по AEP Ohio Charges ($321.36)

        this.dataMap = [];

        // --- СВОЙСТВА ДЛЯ DEPOSIT RECEIPT ---
        this.area_office = '';
        this.deposit_number = '';
        this.deposit_date = '';
        this.deposit_amount = '';
        this.cashier_number = '';

        // --- Свойства для итогов потребления ---
        this.total_usage_12_months = ''; // e.g., 71,973 kWh
        this.avg_monthly_usage = '';     // e.g., 5,998 kWh

        // --- Свойства для Billed Usage ---
        this.billed_usage_date = ''; // e.g., 08/18
        this.billed_usage_kwh_usage = '';
        this.billed_usage_kwh_billed = '';
        this.billed_usage_kw_usage = '';
        this.billed_usage_kw_billed = '';

        // --- Свойства для Meter Read Details ---
        this.meter_read_details_meter_no = '';
        // Строка 1 (kWh)
        this.meter_read_kwh_previous = '';
        this.meter_read_kwh_current = '';
        this.meter_read_kwh_metered = '';
        this.meter_read_kwh_usage = '';
        // Строка 2 (kW)
        this.meter_read_kw_current = '';
        this.meter_read_kw_metered = '';
        this.meter_read_kw_usage = '';

        this.meter_read_service_period = '';
        this.next_read_date_info = '';

    }

    // Вспомогательная функция для очистки сумм от знака '$'
    _cleanAmount(amount) {
        if (typeof amount !== 'string') return 0;
        return parseFloat(amount.replace('$', '').trim()) || 0;
    }

    async setFields(fields) {
        if (!fields || Object.keys(fields).length === 0) {
            fields = randomData.aep_ohio(); // <-- Замените на entergy(), aep_ohio() и т.д.
        }
        this.usage_history_data = fields.usage_history_data || [];

        this.usage_details_prev_year = this._cleanAmount(fields.usage_details_prev_year);
        this.usage_details_prev_month = this._cleanAmount(fields.usage_details_prev_month);
        this.usage_details_curr_month = this._cleanAmount(fields.usage_details_curr_month);

        this.cost_details_prev_year = this._cleanAmount(fields.cost_details_prev_year);
        this.cost_details_prev_month = this._cleanAmount(fields.cost_details_prev_month);
        this.cost_details_curr_month = this._cleanAmount(fields.cost_details_curr_month);

        this.temp_details_prev_year = this._cleanAmount(fields.temp_details_prev_year);
        this.temp_details_prev_month = this._cleanAmount(fields.temp_details_prev_month);
        this.temp_details_curr_month = this._cleanAmount(fields.temp_details_curr_month);

        this.amount_due_date = fields.amount_due_date;
        this.bill_mailing_date = fields.bill_mailing_date;
        this.account_number = fields.account_number;

        const fullServiceAddress = fields.service_address || ''; // Берем полную строку из POST-запроса
        const firstCommaIndex = fullServiceAddress.indexOf(',');

        this.service_address_full = fullServiceAddress;
        if (firstCommaIndex !== -1) {
            // Если запятая найдена
            this.service_address_line1 = fullServiceAddress.substring(0, firstCommaIndex).trim();
            this.service_address_line2 = fullServiceAddress.substring(firstCommaIndex + 1).trim();
        } else {
            // Если запятой нет, вся строка идет в первую линию, вторая пустая
            this.service_address_line1 = fullServiceAddress;
            this.service_address_line2 = '';
        }

        this.customer_name = fields.customer_name;
        this.attn_name = fields.attn_name || '';
        this.billing_period_from = fields.billing_period_from;
        this.billing_period_to = fields.billing_period_to;
        this.billing_period_days = fields.billing_period_days;
        this.barcode_number = fields.barcode_number;
        this.current_charges_kwh = fields.current_charges_kwh;
        this.remit_pay_after_date_amount = fields.remit_pay_after_date_amount;

        // --- НОВЫЕ ПОЛЯ ИЗ ДЕТАЛИЗАЦИИ ---
        this.total_amount_due_last_billing = fields.total_amount_due_last_billing;
        this.payment_thank_you_date = fields.payment_thank_you_date;
        this.payment_thank_you_amount = fields.payment_thank_you_amount;
        this.late_payment_charge = fields.late_payment_charge;
        this.previous_balance_due = fields.previous_balance_due;
        
        this.tariff_info_line = fields.tariff_info_line;
        this.service_delivery_identifier = fields.service_delivery_identifier;
        this.transmission_service = fields.transmission_service;
        this.distribution_service = fields.distribution_service;
        this.customer_charge_detail = fields.customer_charge_detail;
        this.retail_stability_rider = fields.retail_stability_rider;
        this.deferred_asset_rider = fields.deferred_asset_rider;
        this.phase_in_recovery_rider = fields.phase_in_recovery_rider;
        this.power_purchase_rider = fields.power_purchase_rider;
        
        // --- РАСЧЕТЫ НА ОСНОВЕ НОВЫХ ПОЛЕЙ ---
        
        // Delivery Charge = сумма всех детальных сборов
        const deliveryChargeNum = this._cleanAmount(this.transmission_service) +
                                  this._cleanAmount(this.distribution_service) +
                                  this._cleanAmount(this.customer_charge_detail) +
                                  this._cleanAmount(this.retail_stability_rider) +
                                  this._cleanAmount(this.deferred_asset_rider) +
                                  this._cleanAmount(this.phase_in_recovery_rider) +
                                  this._cleanAmount(this.power_purchase_rider);

        this.delivery_charge = `${deliveryChargeNum.toFixed(2)}`;
        this.current_electric_charges_total = `${deliveryChargeNum.toFixed(2)}`;

        // Supplier Charges берем напрямую из формы
        const supplierChargesNum = this._cleanAmount(fields.supplier_charges);
        this.supplier_charges = `${supplierChargesNum.toFixed(2)}`;

        // Current Charges = Delivery + Supplier
        const currentChargesNum = deliveryChargeNum + supplierChargesNum;
        this.current_charges_value = `${currentChargesNum.toFixed(2)}`;
        
        const previousBalanceNum = this._cleanAmount(this.previous_balance_due);
        const totalAmountDueNum = currentChargesNum + previousBalanceNum;

        this.amount_due_value = `${totalAmountDueNum.toFixed(2)}`

        // Заполняем поля для отрывного купона
        this.remit_customer_name = this.customer_name;
        this.remit_service_address = this.service_address;
        this.remit_account_number = this.account_number;
        this.remit_amount_due_date = this.amount_due_date;
        this.remit_amount_due_value = this.amount_due_value;

        // --- ПРИНИМАЕМ ДАННЫЕ ДЛЯ DEPOSIT RECEIPT --
        this.area_office = fields.area_office;
        this.deposit_number = fields.deposit_number;
        this.deposit_date = fields.deposit_date;
        this.deposit_amount = fields.deposit_amount;
        this.cashier_number = fields.cashier_number;

        // --- Принимаем данные для таблиц детализации ---
        this.billed_usage_date = fields.billed_usage_date;
        this.billed_usage_kwh_usage = fields.billed_usage_kwh_usage;
        this.billed_usage_kwh_billed = fields.billed_usage_kwh_billed;
        this.billed_usage_kw_usage = fields.billed_usage_kw_usage;
        this.billed_usage_kw_billed = fields.billed_usage_kw_billed;

        this.meter_read_details_meter_no = fields.meter_read_details_meter_no;
        this.meter_read_kwh_previous = fields.meter_read_kwh_previous;
        this.meter_read_kwh_current = fields.meter_read_kwh_current;
        this.meter_read_kwh_metered = fields.meter_read_kwh_metered;
        this.meter_read_kwh_usage = fields.meter_read_kwh_usage;
        this.meter_read_kw_current = fields.meter_read_kw_current;
        this.meter_read_kw_metered = fields.meter_read_kw_metered;
        this.meter_read_kw_usage = fields.meter_read_kw_usage;
        this.meter_read_service_period = fields.meter_read_service_period;
        this.next_read_date_info = fields.next_read_date_info;

        this.usage_history_data = fields.usage_history_data || [];

        // --- РАССЧЕТ ИТОГОВ ПОТРЕБЛЕНИЯ ---
        if (this.usage_history_data && this.usage_history_data.length > 0) {
            // Суммируем все значения kWh из массива
            const totalKwh = this.usage_history_data.reduce((sum, item) => sum + (item.kwh || 0), 0);
            // Рассчитываем среднее
            const avgKwh = totalKwh / this.usage_history_data.length;

            // Форматируем для отображения
            this.total_usage_12_months = `${totalKwh.toLocaleString('en-US')} kWh`;
            this.avg_monthly_usage = `${Math.round(avgKwh).toLocaleString('en-US')} kWh`;
        } else {
            // Если данных нет, оставляем поля пустыми
            this.total_usage_12_months = '';
            this.avg_monthly_usage = '';
        }
    }

    _describeArc(x, y, radius, startAngle, endAngle) {
        const startRad = (startAngle - 90) * Math.PI / 180;
        const endRad = (endAngle - 90) * Math.PI / 180;
        const start = {
            x: x + (radius * Math.cos(startRad)),
            y: y + (radius * Math.sin(startRad))
        };
        const end = {
            x: x + (radius * Math.cos(endRad)),
            y: y + (radius * Math.sin(endRad))
        };
        const largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1";
        const d = [
            "M", start.x, start.y,
            "A", radius, radius, 0, largeArcFlag, 1, end.x, end.y
        ].join(" ");

        return d;
    }

    async _drawDetailChart(page, pageHeight, options) {
        // Импортируем degrees из pdf-lib в начале файла, если его еще нет
        // const { degrees } = require('pdf-lib');
        // Или, если он уже импортирован в родительском классе, можно использовать this.degrees() (если бы такой метод был)
        // Проще всего добавить импорт в этот файл.
        // const { degrees } = require('pdf-lib'); // Добавьте это в начало файла, после других require.

        const { x_ill, y_ill, width, height, values, labels, colors, valueFormatter } = options;
        
        const maxValue = Math.max(...values);
        if (maxValue === 0) return;
        
        const numBars = values.length;
        const barWidth = (width / numBars) * 0.9;
        const barMargin = (width / numBars) * 0.3;
        const stepX = barWidth + barMargin;
        
        values.forEach((value, index) => {
            const barHeight = (value / maxValue) * height;
            const barX = x_ill + (index * stepX);
            const baseY = pageHeight - y_ill - height;
            
            // Рисуем столбец
            page.drawRectangle({
                x: barX,
                y: baseY,
                width: barWidth,
                height: barHeight,
                color: colors[index] || rgb(0.8, 0.8, 0.8),
            });
            
            const textFont = this.getCustomerFontByIndex(0);
            const textColor = rgb(0.3, 0.3, 0.3);
            
            // --- Рисуем подпись под столбцом (месяц) ---
            const labelText = labels[index] || '';
            const labelY = baseY - 10;
            
            page.drawText(labelText, {
                x: barX + barWidth / 2 - textFont.widthOfTextAtSize(labelText, 6) / 2,
                y: labelY, font: textFont, size: 6, color: textColor
            });

            // --- НОВЫЙ БЛОК: Рисуем значение над столбцом (с наклоном) ---
            // Используем функцию форматирования, если она передана
            const valueText = valueFormatter ? valueFormatter(value) : String(value);
            const valueTextWidth = textFont.widthOfTextAtSize(valueText, 6);
            
            page.drawText(valueText, {
                // Начальная точка для текста - центр верхней грани столбца
                x: barX + (barWidth / 2),
                y: baseY + barHeight + 2, // Чуть выше столбца
                font: textFont,
                size: 6,
                color: textColor,
                // Поворачиваем текст на -45 градусов относительно его точки (x,y)
                rotate: degrees(45) 
            });
        });
    }

    async draw() {

        // =======================================================================
        // --- ФИНАЛЬНАЯ ВЕРСИЯ ДЛЯ ОТРИСОВКИ ОДНОГО СЕКТОРА (с защитой) ---
        // =======================================================================

        const page = this.pages[0];
        const pageHeight = page.getHeight();

        // 1. Ваши точные параметры
        const centerX_ill = 152.692;
        const centerY_ill = 378.686;
        const radius_ill = 141.5 / 2; // 71
        const thickness = 42;

        // 2. Пересчет координат
        const centerX_pdf = centerX_ill;
        const centerY_pdf = pageHeight - centerY_ill;
        const centerY_for_svg = pageHeight - centerY_pdf;

        // 3. Получение значений
        const supplierValue = this._cleanAmount(this.supplier_charges);
        const deliveryValue = this._cleanAmount(this.delivery_charge);
        const totalValue = supplierValue + deliveryValue;

        // 4. --- ГЛАВНАЯ ПРОВЕРКА ---
        // Выполняем отрисовку только если есть что делить и рисовать.
        if (totalValue > 0) {
            const supplierAngle = (supplierValue / totalValue) * 360;

            // 5. Проверяем, что угол является конечным числом (не NaN, не Infinity)
            if (isFinite(supplierAngle)) {
                const startAngle = 0;
                const endAngle = supplierAngle;

                const supplierArcPath = this._describeArc(centerX_pdf, centerY_for_svg, radius_ill, startAngle, endAngle);
                
                // 6. Дополнительная проверка, что в сгенерированном пути нет NaN
                if (!supplierArcPath.includes('NaN')) {
                    page.drawSvgPath(supplierArcPath, {
                        y: pageHeight,
                        borderColor: rgb(101/255, 159/255, 217/255),
                        borderWidth: thickness,
                    });
                } else {
                    console.error("Generated SVG path contains NaN. Skipping drawSvgPath. Arc Path:", supplierArcPath);
                }
            } else {
                console.error(`Calculated angle is not a finite number: ${supplierAngle}. Skipping drawSvgPath.`);
            }
        }
        // =======================================================================
        // --- КОНЕЦ БЛОКА ДИАГРАММЫ ---
        // =======================================================================

        // =======================================================================
        // --- РИСУЕМ СТОЛБЧАТУЮ ДИАГРАММУ "USAGE HISTORY" (ИСПРАВЛЕННАЯ ВЕРСИЯ) ---
        // =======================================================================
        { // Создаем новую область видимости, чтобы избежать конфликта 'const page'
            const page = this.pages[0]; // Предполагаем, что диаграмма на первой странице
            const pageHeight = page.getHeight(); // 792

            // 1. Параметры области графика (измерьте в Illustrator)
            //    ВАЖНО: y_ill - это ВЕРХНИЙ край области для столбцов
            const chartArea_ill = {
                x: 319,      // Левый край области для столбцов (из Illustrator)
                y_ill: 225,  // ВЕРХНИЙ край области для столбцов (из Illustrator)
                width: 273,  // Общая ширина области для всех столбцов
                height: 56  // Максимальная высота самого высокого столбца
            };

            const usageData = this.usage_history_data;

            if (usageData && usageData.length > 0) {
                const kwhValues = usageData.map(d => d.kwh);
                const maxKwh = Math.max(...kwhValues);
                
                const barWidth = (chartArea_ill.width / usageData.length) * 0.7;
                const barMargin = (chartArea_ill.width / usageData.length) * 0.3;
                const stepX = barWidth + barMargin;

                const defaultBarColor = rgb(222/255, 224/255, 227/255);
                const lastBarColor = rgb(172/255, 217/255, 244/255);

                usageData.forEach((dataPoint, index) => {
                    const barHeight_pdf = (dataPoint.kwh / maxKwh) * chartArea_ill.height;
                    const barX_pdf = chartArea_ill.x + (index * stepX);
                    const baseY_pdf = pageHeight - chartArea_ill.y_ill - chartArea_ill.height;
                    
                    const color = (index === usageData.length - 1) ? lastBarColor : defaultBarColor;

                    page.drawRectangle({
                        x: barX_pdf, y: baseY_pdf, width: barWidth, height: barHeight_pdf, color: color,
                    });

                    const textFont = this.getCustomerFontByIndex(0);
                    
                    // --- Рисуем подпись месяца (без наклона) ---
                    const monthText = dataPoint.month;
                    page.drawText(monthText, {
                        x: barX_pdf + (barWidth / 2) - (textFont.widthOfTextAtSize(monthText, 7) / 2),
                        y: baseY_pdf - 12,
                        font: textFont, size: 7, color: rgb(0,0,0)
                    });
                    
                    // --- ИЗМЕНЕНО: Рисуем значение kWh над столбцом (с наклоном) ---
                    const valueText = dataPoint.kwh.toLocaleString('en-US'); // Форматируем с запятой
                    page.drawText(valueText, {
                        x: barX_pdf + (barWidth / 2), // Точка привязки - центр верха столбца
                        y: baseY_pdf + barHeight_pdf + 3, // Чуть выше столбца
                        font: textFont,
                        size: 6,
                        color: rgb(0.3, 0.3, 0.3),
                        rotate: degrees(45) // Применяем наклон
                    });
                });
                
                // ... (код для отрисовки годов остается без изменений) ...
            }
        }
        // =======================================================================
        // --- КОНЕЦ БЛОКА СТОЛБЧАТОЙ ДИАГРАММЫ ---
        // =======================================================================
        // =======================================================================
        // --- РИСУЕМ МАЛЕНЬКИЕ ГРАФИКИ НА СТРАНИЦЕ 3 ---
        // =======================================================================
        {
            const page = this.pages[2];
            if (page) {
                const pageHeight = page.getHeight();
                const grayColor = rgb(222/255, 224/255, 227/255);
                const blueColor = rgb(172/255, 217/255, 244/255);

                const delta = 10;
                const delta_y = 3;
                await this._drawDetailChart(page, pageHeight, {
                    x_ill: 326 + delta, y_ill: 100 + delta_y, width: 60, height: 40, // <-- Замените на реальные измерения
                    values: [this.usage_details_prev_year, this.usage_details_prev_month, this.usage_details_curr_month],
                    labels: ["Aug '17", "Jul '18", "Aug '18"], // Эти метки можно тоже передавать
                    colors: [grayColor, grayColor, blueColor],
                    valueFormatter: (val) => val.toLocaleString('en-US') // Добавляет запятые-разделители
                });

                // --- График 2: Avg. Daily Cost ---
                await this._drawDetailChart(page, pageHeight, {
                    x_ill: 416 + delta, y_ill: 100 + delta_y, width: 60, height: 40, // <-- Замените на реальные измерения
                    values: [this.cost_details_prev_year, this.cost_details_prev_month, this.cost_details_curr_month],
                    labels: ["Aug '17", "Jul '18", "Aug '18"],
                    colors: [grayColor, grayColor, blueColor],
                    valueFormatter: (val) => `$${val.toFixed(2)}`
                });

                // --- График 3: Avg. Temperature ---
                await this._drawDetailChart(page, pageHeight, {
                    x_ill: 506 + delta, y_ill: 100 + delta_y, width: 60, height: 40, // <-- Замените на реальные измерения
                    values: [this.temp_details_prev_year, this.temp_details_prev_month, this.temp_details_curr_month],
                    labels: ["Aug '17", "Jul '18", "Aug '18"],
                    colors: [grayColor, grayColor, blueColor], // Последний столбец синий
                    valueFormatter: (val) => `${val}°F`
                });
            }
        }
        // =======================================================================

        const mapFilePath = path.join(__dirname, 'AEPOhio.map.json');
        const configJson = fs.readFileSync(mapFilePath, 'utf8');
        const config = JSON.parse(configJson);
        const { constants, map: dataMap } = config; // Разделяем на константы и карту

                // --- Обновленный цикл отрисовки ---
        for (const item of dataMap) {
            const page = this.getPageByIndex(item.ipage);
            const font = this.getCustomerFontByIndex(item.ifont);

            if (!page || !font) {
                console.warn(`Skipping draw: Missing page or font for item:`, item);
                continue;
            }
            
            const pageHeight = this.getPageHeight(item.ipage);
            const fieldText = `${this._getFieldValue(item) || ''}`;

            const x_ill = this._evaluate(item.x, constants);
            const y_ill = this._evaluate(item.y, constants);
            const size = this._evaluate(item.size, constants);
            
            if (isNaN(x_ill) || isNaN(y_ill) || isNaN(size)) {
                console.warn('Could not evaluate coordinates/size for item:', item);
                continue;
            }
            
            let x_pdf;
            const y_pdf = pageHeight - y_ill - (size * this.baselineCorrectionFactor);

            if (item.align === 'right') {
                const pageWidth = this.getPageWidth(item.ipage);
                const rightMargin_pdf = pageWidth - x_ill;
                x_pdf = await this.alignTextToRight(item.ipage, item.ifont, size, rightMargin_pdf, fieldText);
            } else if (item.align === 'center') {
                // НОВЫЙ БЛОК: ВЫРАВНИВАНИЕ ПО ЦЕНТРУ
                const textWidth = font.widthOfTextAtSize(fieldText, size);
                x_pdf = x_ill - (textWidth / 2);

            }else {
                x_pdf = x_ill;
            }

            // ЯВНОЕ ОПРЕДЕЛЕНИЕ ЦВЕТА
            // Преобразуем cR, cG, cB в числа. Если они не определены или не являются числами, используем 0.
            const r = parseFloat(item.cR) || 0;
            const g = parseFloat(item.cG) || 0;
            const b = parseFloat(item.cB) || 0;
            
            // Вызываем draw, передавая ОТДЕЛЬНЫЕ компоненты цвета R, G, B
            await super.draw(
                item.ipage,
                fieldText,
                x_pdf,
                y_pdf,
                size,
                item.ifont,
                r, // <-- ПЕРЕДАЕМ число r
                g, // <-- ПЕРЕДАЕМ число g
                b  // <-- ПЕРЕДАЕМ число b
            );
        }
    }

    async saveData(host, outputDir) {
        return await super.saveData(host, outputDir, this.getPdfDocumentName());
    }
}

module.exports = pdfFillDataAEPOhio;