<?xml version="1.0" encoding="utf-8"?>
<odoo>

        <!-- Automation Form View -->
        <record id="view_base_automation_form" model="ir.ui.view">
            <field name="name">Automations</field>
            <field name="model">base.automation</field>
            <field name="arch" type="xml">
                <form string="Automation Rule">
                    <sheet>
                        <div class="oe_button_box" name="button_box">
                            <button groups="base.group_no_one" invisible="trigger != 'on_webhook'"
                                type="object"
                                name="action_view_webhook_logs"
                                string="Logs"
                                class="oe_stat_button"
                                icon="fa-list"
                            />
                        </div>
                        <field name="active" invisible="1" />
                        <field name="model_name" invisible="1" force_save="True" />
                        <widget name="web_ribbon" title="Archived" bg_color="bg-danger" invisible="active"/>
                        <div class="oe_title">
                            <h1><field name="name" placeholder="Set an explicit name"/></h1>
                        </div>
                        <group groups="!base.group_no_one" invisible="context.get('default_model_id')">
                            <group>
                                <field name="model_id" options="{'no_create': True}" />
                            </group>
                        </group>
                        <group groups="base.group_no_one">
                            <group>
                                <field name="model_id" options="{'no_create': True}" />
                            </group>
                        </group>
                        <group invisible="not model_id">
                            <group>
                                <label for="trigger"/>
                                <div>
                                    <div class="d-flex flex-row">
                                        <field name="trigger" widget="base_automation_trigger_selection"/>
                                        <field name="trg_date_id" class="oe_inline" placeholder="Select a date field..."
                                            options="{'no_open': True, 'no_create': True}"
                                            context="{'hide_model': 1}"
                                            invisible="trigger != 'on_time'"
                                            required="trigger == 'on_time'"/>
                                        <field name="trg_selection_field_id" placeholder="Select a value..." class="oe_inline"
                                            options="{'no_open': True, 'no_create': True}"
                                            invisible="trigger not in ['on_state_set', 'on_priority_set']"
                                            required="trigger in ['on_state_set', 'on_priority_set']"
                                        />
                                        <field name="trg_field_ref" placeholder="Select a value..." class="oe_inline"
                                            options="{'no_open': True, 'no_create': True}"
                                            invisible="trigger not in ['on_stage_set', 'on_tag_set']"
                                            required="trigger in ['on_stage_set', 'on_tag_set']"
                                        />
                                        <field name="trg_field_ref_model_name" invisible="1" />
                                    </div>
                                    <div class="text-muted" invisible="trigger != 'on_change'"><i class="fa fa-warning"/> Automation rules triggered by UI changes will be executed <em>every time</em> the watched fields change, <em>whether you save or not</em>.</div>
                                </div>
                                <label for="url" string="Secret URL" invisible="trigger != 'on_webhook'"/>
                                <div class="d-flex flex-row" invisible="trigger != 'on_webhook'">
                                    <field name="url" class="oe_inline mb-0" widget="CopyClipboardURL"/>
                                    <button groups="base.group_no_one"
                                        type="object"
                                        name="action_rotate_webhook_uuid"
                                        class="oe_inline btn btn-link flex-shrink-0 px-1 py-0"
                                        icon="fa-refresh"
                                        string="Renew"
                                        help="If renewed, update the secret URL in the third-party app that calls this webhook."
                                    />
                                </div>
                                <field name="log_webhook_calls" widget="boolean_toggle" invisible="trigger != 'on_webhook'" groups="base.group_no_one"/>
                                <label for="trg_date_range" invisible="trigger not in ['on_time', 'on_time_created', 'on_time_updated']"/>
                                <div class="d-flex flex-row gap-2" invisible="trigger not in ['on_time', 'on_time_created', 'on_time_updated']">
                                    <field name="trg_date_range" class="oe_inline o_input_3ch" required="trigger in ['on_time', 'on_time_created', 'on_time_updated']" />
                                    <field name="trg_date_range_type" class="oe_inline" required="trigger in ['on_time', 'on_time_created', 'on_time_updated']" />
                                    <field name="trg_date_range_mode" class="oe_inline" invisible="trigger in ['on_time_created', 'on_time_updated']" required="trigger == 'on_time'" />
                                    <button
                                        type="object"
                                        name="action_open_scheduled_action"
                                        string="Scheduled action"
                                        icon="oi-arrow-right"
                                        class="oe_inline btn-link mt-n1"
                                        groups="base.group_no_one"
                                    />
                                </div>
                                <field name="trg_date_calendar_id" class="oe_inline"
                                    options="{'no_open': True, 'no_create': True}"
                                    invisible="not trg_date_id or trg_date_range_type != 'day'"/>
                                <field name="filter_pre_domain" widget="domain" groups="base.group_no_one"
                                       options="{'model': 'model_name', 'in_dialog': True, 'allow_expressions':True}"
                                       invisible="trigger in [
                                            'on_create',
                                            'on_unlink',
                                            'on_change',
                                            'on_webhook',
                                            'on_time',
                                            'on_time_created',
                                            'on_time_updated'
                                        ]"
                                />
                                <field name="previous_domain" invisible="1"/>
                                <field name="filter_domain" widget="domain" groups="base.group_no_one"
                                    options="{'model': 'model_name', 'in_dialog': True, 'allow_expressions':True}"
                                    invisible="trigger in ['on_webhook']"
                                />
                                <field name="filter_domain" widget="domain" groups="!base.group_no_one"
                                    options="{'model': 'model_name', 'in_dialog': False, 'foldable': True, 'allow_expressions':True}"
                                    invisible="trigger not in ['on_create', 'on_create_or_write', 'on_change', 'on_unlink', 'on_time', 'on_time_created', 'on_time_updated']"
                                />
                                <field name="trigger_field_ids" string="When updating" placeholder="Select fields..."
                                    options="{'no_open': True, 'no_create': True}"
                                    domain="[('model_id', '=', model_id),('store','=',True)]"
                                    context="{'hide_model': 1}"
                                    invisible="trigger != 'on_create_or_write'" widget="many2many_tags" />
                                <field name="on_change_field_ids" string="When updating" placeholder="Select fields..."
                                    options="{'no_open': True, 'no_create': True}"
                                    domain="[('model_id', '=', model_id)]"
                                    context="{'hide_model': 1}"
                                    invisible="trigger != 'on_change'" widget="many2many_tags" />
                            </group>
                            <group>
                                <label for="record_getter" string="Target Record" invisible="trigger != 'on_webhook'" />
                                <div invisible="trigger != 'on_webhook'">
                                    <field name="record_getter" string="Target Record"/>
                                    <div>
                                        <div  class="text-muted"><i class="fa fa-info-circle"/> The default target record getter will work out-of-the-box for any webhook coming from another Odoo instance.</div>
                                        <span class="text-muted"> Available variables: </span>
                                        <ul class="text-muted">
                                            <li><code>env</code>: environment on which the action is triggered</li>
                                            <li><code>model</code>: model of the record on which the action is triggered; is a void recordset</li>
                                            <li><code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries</li>
                                            <li><code>payload</code>: the payload of the call (GET parameters, JSON body), as a dict.</li>
                                        </ul>
                                    </div>
                                </div>
                            </group>
                        </group>
                        <notebook invisible="not model_id">
                            <page string="Actions To Do" name="actions">
                                <field
                                    name="action_server_ids"
                                    widget="one2many"
                                    mode="kanban"
                                    context="{'default_model_id': model_id, 'is_modal': 1}"
                                />
                            </page>
                            <page string="Notes" name="notes">
                                <field name="description" placeholder="Keep track of what this automation does and why it exists..."/>
                            </page>
                        </notebook>
                    </sheet>
                    <chatter/>
                </form>
            </field>
        </record>

        <!-- automation List View -->
        <record id="view_base_automation_tree" model="ir.ui.view">
            <field name="name">base.automation.list</field>
            <field name="model">base.automation</field>
            <field name="arch" type="xml">
                <list string="Automation Rules">
                    <field name="name"/>
                    <field name="trigger"/>
                    <field name="model_id"/>
                </list>
            </field>
        </record>

        <!-- automation Kanban View -->
        <record id="view_base_automation_kanban" model="ir.ui.view">
            <field name="name">base.automation.kanban</field>
            <field name="model">base.automation</field>
            <field name="arch" type="xml">
                <kanban
                    string="Automation Rules"
                    class="o_base_automation_kanban_view"
                    records_draggable="false"
                    groups_draggable="false"
                    quick_create="false"
                    group_create="false"
                    group_edit="false"
                    group_delete="false"
                >
                    <field name="active"/>
                    <templates>
                        <t t-name="card" class="flex-md-row">
                            <widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active" />
                            <div class="d-flex align-items-center w-100 w-md-25 o_automation_base_info">
                                <div class="d-flex flex-column">
                                    <field name="name" class="fs-2 fw-bold"/>
                                    <field name="model_id" invisible="context.get('default_model_id')"/>
                                    <div class="d-flex align-items-center gap-1" invisible="trigger in ['on_time', 'on_time_created', 'on_time_updated']">
                                        <field name="trigger" />
                                        <field name="on_change_field_ids" invisible="trigger != 'on_change'" class="my-1" />
                                        <field name="trg_selection_field_id" invisible="trigger not in ['on_state_set', 'on_priority_set']" class="o_tag o_tag_color_0 rounded-pill p-1 px-2" />
                                        <field name="trg_field_ref" invisible="trigger not in ['on_stage_set', 'on_tag_set']" class="o_tag o_tag_color_0 rounded-pill p-1 px-2" />
                                        <field name="trigger_field_ids" invisible="trigger not in ['on_create_or_write']" class="my-1" />
                                    </div>
                                    <div class="d-flex align-items-center gap-1" invisible="trigger != 'on_time'">
                                        <field name="trg_date_range"/>
                                        <field name="trg_date_range_type" class="text-lowercase text-nowrap" />
                                        <field name="trg_date_range_mode" class="text-lowercase text-nowrap" />
                                        <span class="flex-shrink-0">
                                            based on <field name="trg_date_id" invisible="trigger != 'on_time'"  class="o_tag o_tag_color_0 rounded-pill p-1 px-2" />
                                        </span>
                                    </div>
                                    <div class="d-flex align-items-center gap-1" invisible="trigger not in ['on_time_created', 'on_time_updated']">
                                        <field name="trg_date_range"/>
                                        <field name="trg_date_range_type" class="text-lowercase" />
                                        <field name="trigger" class="text-lowercase" />
                                        <field name="trg_date_id" invisible="trigger != 'on_time'"  class="o_tag o_tag_color_0 rounded-pill p-1 px-2" />
                                    </div>
                                    <field name="trg_date_calendar_id" invisible="not trg_date_id or trg_date_range_type != 'day'" />
                                </div>
                            </div>
                            <div class="d-none d-md-flex flex-grow-1 align-items-center gap-3 o_automation_actions" data-name="more-info">
                                <i class="fa fa-2x fa-arrow-right text-primary" title="Actions" />
                                <field name="action_server_ids" widget="base_automation_actions_one2many" class="align-self-center w-100 me-md-3" />
                            </div>
                        </t>
                    </templates>
                </kanban>
            </field>
        </record>

        <record id="view_base_automation_search" model="ir.ui.view">
            <field name="name">base.automation.search</field>
            <field name="model">base.automation</field>
            <field name="arch" type="xml">
                <search>
                    <field name="name"/>
                    <field name="model_id"/>
                    <separator/>
                    <filter string="Include Archived" name="inactive" domain="[('active', 'in', [False, True])]"/>
                </search>
            </field>
        </record>

        <!-- automation Action -->
        <record id="base_automation_act" model="ir.actions.act_window">
            <field name="name">Automation Rules</field>
            <field name="res_model">base.automation</field>
            <field name="path">automations</field>
            <field name="view_mode">kanban,list,form</field>
            <field name="view_id" ref="view_base_automation_kanban"/>
            <field name="context">{'search_default_inactive': 1}</field>
            <field name="help" type="html">
                <img class="w-100 w-md-75"
                src="/base_automation/static/img/automation.svg" />
              <p>
                Automate <em>everything</em> with Automation Rules
              </p><p>
                Send an email when an object changes state, archive records
                after a month of inactivity or remind yourself to follow-up on
                tasks when a specific tag is added.
              </p><p>With Automation Rules, you can automate
                <em>any</em> workflow.
              </p>
            </field>
        </record>

        <menuitem id="menu_base_automation_form"
            parent="base.menu_automation" action="base_automation_act" sequence="1"/>

        </odoo>
